2016-09-23 9 views
1

は私が春を使用して、次のコードで、今日の問題に遭遇した:これは我々のサイト(uPortalのインスタンス)の上部に一連のタブの表示タイトルを取得するために使用されMessageFormatのPattern.quote()に相当するものは何ですか?

String tabTitle = messageSource.getMessage(tabName, new Object[] {}, tabName, locale) 

。問題は、tabNameに一重引用符が含まれている場合、結果から自動的に削除されるということです。例えば、What's For LunchWhats For Lunchになります。

私はその理由を追跡しました。そのメソッドの3番目のパラメータは、java.text.MessageFormatで指定された形式になっているはずです。 2つの単一引用符が必要です。

フォーマットでパラメータを渡していないので、tabNameの特殊文字を3番目のパラメータとして渡す前に安全にエスケープできます。私は手動で二重引用符で一重引用符を置き換えることができましたが、私が本当に好きなのは、MessageFormat言語の場合にのみPattern.quote()のようなもので、すべてのエスケープ処理を保証します。このようなことは何ですか?

+1

'' '→' '' '置換を安全に行うことができます。次に、全体を一重引用符で囲みます。二重引用符は、一重引用符で囲まれたテキストの中でも正しく解釈されます。 – VGR

+0

ありがとう、これを回答として追加すると、私はそれを受け入れます。 – xdhmoore

答えて

1

方法はありませんが、テキスト全体をASCIIの一重引用符で囲むことで同じことが達成されます。説明したように'''の置換を行い、テキストを'で囲みます。 MessageFormat documentationから:

例えば、パターン文字列"'{''}'"'{のシーケンス(引用の開始と左中括弧)、''(単一引用符)として解釈され、そして}'(右中括弧と終了ではない'{''}'(左と右の中括弧を引用符で囲んで):"{}"ではなく、文字列"{'}"を表します。

関連する問題