MessageFormat 的 Pattern.quote() 等价物是什么?
What is the equivalent of Pattern.quote() for MessageFormat?
我 运行 今天遇到一个问题,使用 Spring:
以下代码
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
语言,这将是 gua运行teed处理所有转义。有这样的东西吗?
没有任何方法,但是用 ASCII 单引号字符将整个文本括起来将完成同样的事情。您可以按照您的描述进行 '
→ ''
替换,然后用 '
包围文本。来自 MessageFormat documentation:
For example, pattern string "'{''}'"
is interpreted as a sequence of '{
(start of quoting and a left curly brace), ''
(a single quote), and }'
(a right curly brace and end of quoting), not '{'
and '}'
(quoted left and right curly braces): representing string "{'}"
, not "{}"
.
我 运行 今天遇到一个问题,使用 Spring:
以下代码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
语言,这将是 gua运行teed处理所有转义。有这样的东西吗?
没有任何方法,但是用 ASCII 单引号字符将整个文本括起来将完成同样的事情。您可以按照您的描述进行 '
→ ''
替换,然后用 '
包围文本。来自 MessageFormat documentation:
For example, pattern string
"'{''}'"
is interpreted as a sequence of'{
(start of quoting and a left curly brace),''
(a single quote), and}'
(a right curly brace and end of quoting), not'{'
and'}'
(quoted left and right curly braces): representing string"{'}"
, not"{}"
.