MessagingFormat 全般についてはすでにいくつかの質問がありますが、私の質問に答えるものはまだ見つかりません。一重引用符がパターンを壊すことは承知しています。MessageFormat や Log4j を使用している場合、「しない」などの方法でプレースホルダーが壊れる可能性があります。
簡単な例:
@Test
public void test() {
String pattern = "{0} doesn't show values ( {1}, {2}, {3}, {4} )";
final Object[] args = { "Testpattern", 100, 200, 300, 400 };
System.out.println(MessageFormat.format(pattern, args));
pattern = pattern.replaceAll("(?<!')'(?!')", "''");
System.out.println("Replaced singlequotes: " + MessageFormat.format(pattern, args));
}
出力:
Testpattern doesnt show values ( {1}, {2}, {3}, {4} )
Replaced singlequotes: Testpattern doesn't show values ( 100, 200, 300, 400 )
したがって、正規表現を使用してすべての一重引用符を置き換えると、機能します。正規表現の先読み/後読みを使用して、「単一の単一引用符」のみを置き換えようとする正規表現を作成しました。
正規表現置換の例:
doesn't -> doesn''t
doesn''t -> doesn''t
doesn'''t -> doesn'''t
独自の正規表現を提供する代わりに、「escapeSingleQuotes」を処理する apache-commons ユーティリティ (またはその他のライブラリ) が存在するかどうか疑問に思っています...?