为什么这些Java replaceAll语句不起作用?

时间:2013-04-26 09:08:01

标签: java regex string

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个没有?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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