我有String模板
xxxxxxxx xxxxx-xx: [{0}] xxxxxxx xxxxx xxxxxx xxxxxx [{1}] xxxxxx xxxx xxxxx'x xxxxx xxxxxx xxxx [{2}]
即使我提供的所有三个参数仍无法正常工作
public static void main(String[] args) {
String s = "xxxxxxxx xxxxx-xx: [{0}] xxxxxxx xxxxx xxxxxx xxxxxx [{1}] xxxxxx xxxx xxxxx'x xxxxx xxxxxx xxxx [{2}]";
System.out.println(MessageFormat.format(s,"1","2","3"));
}
输出结果为:
xxxxxxxx xxxxx-xx: [1] xxxxxxx xxxxx xxxxxx xxxxxx [2] xxxxxx xxxx xxxxxx xxxxx xxxxxx xxxx [{2}]
请参阅输出,输出{2}
而不是3
,我找不到为什么它不起作用。这是一个错误还是我错过了什么?
答案 0 :(得分:9)
您的问题出在单引号'
中,您必须使用双''
而不是一个:
xxxxx''x
阅读有关单引号(MessageFormat)
的文档在String中,可以使用一对单引号来引用任何引号 除单引号外的任意字符。例如,模式字符串 “'{0}'”表示字符串“{0}”,而不是FormatElement。 单引号 它本身必须用整数的双引号表示 字符串。例如,模式字符串“'{''}'”被解释为a 序列'{(引用开始和左大括号),''(单个 引用)和}'(右大括号和引用的结尾),而不是'{'和 '}'(引用左右花括号):表示字符串“{'}”, 不是“{}”。
答案 1 :(得分:3)
确实是撇号,你需要用另一个撇号来逃避它,例如:''xxx
。它在doc btw:
在字符串中,''(两个单引号)代表单引号。
答案 2 :(得分:2)
这是因为你的String中有'
。你需要逃避它或者你错过了它。