2016-09-23 157 views
1

我今天遇到了一個問題與使用Spring下面的代碼:MessageFormat的Pattern.quote()的等價物是什麼?

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

這是用來在我們的網站(的uPortal一個實例)的頂部得到一系列選項卡中顯示的標題。問題是,如果tabName包含單引號,它會自動從結果中刪除。例如What's For Lunch變爲Whats For Lunch

我已經找到了原因,這是因爲該方法中的第三個參數應該是在java.text.MessageFormat指定的格式。需要2個單引號。

因爲我們沒有傳入格式的任何參數,我可以安全地轉義tabName中的任何特殊字符作爲第三個參數傳入之前。我可以手動與2個單引號這裏代替單引號,但我真的很喜歡的是像Pattern.quote(),只爲MessageFormat語言,這將保證來處理所有的逃跑。有這樣的事嗎?

+1

沒有,但你可以安全地進行''''''''替換,然後用單引號括住整個東西。即使在單引號文本中也可以正確解釋加倍的單引號。 – VGR

+0

謝謝,如果您將此添加爲答案,我會接受它。 – xdhmoore

回答

1

沒有它的任何方法,但封閉在ASCII單引號字符,整個文本將完成同樣的事情。你可以按照你所描述的做'''替換,然後用'包圍文本。從MessageFormat documentation

例如,模式字符串"'{''}'"被解釋爲的'{(引用的開始和左大括號),''(單引號),並}'序列(右大括號和端),不是'{''}'(引用左右花括號):表示字符串"{'}",而不是"{}"