一般来说,关于 MessagingFormat 已经有几个问题,但我还没有找到任何可以回答我的问题的东西。我知道,单引号会破坏这种模式。如果您使用 MessageFormat 或 Log4j,则“不”之类的内容可能会破坏可能的占位符。
请参阅在字符串中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串“'{0}'”表示字符串“{0}”,而不是 FormatElement。单引号本身必须在 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 )
因此,如果我使用正则表达式替换所有单引号,它将起作用。我刚刚编写了正则表达式,试图只使用正则表达式lookahead/lookbehind替换“单引号”。
正则表达式替换示例:
doesn't -> doesn''t
doesn''t -> doesn''t
doesn'''t -> doesn'''t
我只是想知道,是否存在任何 apache-commons 实用程序(或任何其他库),它将为我处理“escapeSingleQuotes”而不是提供我自己的正则表达式......?