1
String level = "INFO";
String stamp = "2013-04-26";
String message = "Log me, please!";

String template = "[%LVL%] - %STAMP%\n%MSG%";
String log = template.replaceAll("%LVL%", level);
log = template.replaceAll("%STAMP%", stamp);
log = template.replaceAll("%MSG%", message);

System.out.println(log);

这打印:

[%LVL%] - %STAMP%
Log me, please!

为什么第 3 个replaceAll("%MSG%", message);有效,但第 2 个无效?

4

2 回答 2

12

它不起作用,因为您没有在其他语句中使用被替换的变量。您总是使用template,因此您将始终替换原始模板变量,而不是(增量)替换的变量。所以最后,你只会template用模式替换原来的%MSG%

它应该是:

String log = template.replaceAll("%LVL%", level);
log = log.replaceAll("%STAMP%", stamp);
log = log.replaceAll("%MSG%", message);

编辑

正如@Fildor 建议的那样,String.format()这将是一个更好的解决方案:

String.format("%s - %s\n%s", level, stamp, message);
于 2013-04-26T09:10:11.983 回答
2

replaceAll返回结果字符串但不修改原始字符串。您需要 log = log.replaceAll用于将来的语句。

于 2013-04-26T09:11:56.793 回答