2016-09-23 159 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

例如,模式字符串"'{''}'"被解释为的'{(引用的开始和左大括号),''(单引号),并}'序列(右大括号和端),不是'{''}'(引用左右花括号):表示字符串"{'}",而不是"{}"