Java Message Formatter无法正常工作

时间:2017-11-27 09:43:37

标签: java java-8 messageformat

我有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,我找不到为什么它不起作用。这是一个错误还是我错过了什么?

3 个答案:

答案 0 :(得分:9)

您的问题出在单引号'中,您必须使用双''而不是一个:

xxxxx''x

阅读有关单引号(MessageFormat

的文档
  

在String中,可以使用一对单引号来引用任何引号   除单引号外的任意字符。例如,模式字符串   “'{0}'”表示字符串“{0}”,而不是FormatElement。 单引号   它本身必须用整数的双引号表示   字符串。例如,模式字符串“'{''}'”被解释为a   序列'{(引用开始和左大括号),''(单个   引用)和}'(右大括号和引用的结尾),而不是'{'和   '}'(引用左右花括号):表示字符串“{'}”,   不是“{}”。

答案 1 :(得分:3)

确实是撇号,你需要用另一个撇号来逃避它,例如:''xxx。它在doc btw:

  

在字符串中,''(两个单引号)代表单引号。

答案 2 :(得分:2)

这是因为你的String中有'。你需要逃避它或者你错过了它。