11

MessagingFormat 全般についてはすでにいくつかの質問がありますが、私の質問に答えるものはまだ見つかりません。一重引用符がパターンを壊すことは承知しています。MessageFormat や Log4j を使用している場合、「しない」などの方法でプレースホルダーが壊れる可能性があります。

文字列内を参照してください。一重引用符のペアを使用して、一重引用符以外の任意の文字を引用できます。たとえば、パターン文字列 "'{0}'" は、FormatElement ではなく、文字列 "{0}" を表します。一重引用符自体は、 String 全体で二重の一重引用符 '' で表す必要があります

簡単な例:

@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 ユーティリティ (またはその他のライブラリ) が存在するかどうか疑問に思っています...?

4

5 に答える 5

17

次のようなことをするのに役立ちました:

`doesn''t`
于 2014-01-30T09:11:34.947 に答える