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 に答える