8

我有字符串模板

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

4

3 回答 3

14

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

xxxxx''x

阅读有关单引号的文档(MessageFormat

在字符串中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串“'{0}'”表示字符串“{0}”,而不是 FormatElement。单引号本身必须在整个字符串中用双引号 '' 表示。例如,模式字符串 "'{''}'" 被解释为 '{(引号开头和左大括号)、''(单引号)和 }'(右大括号和结尾引用),而不是 '{' 和 '}'(带引号的左右大括号):表示字符串“{'}”,而不是“{}”。

于 2017-11-27T09:49:14.753 回答
4

确实是撇号,你需要用另一个撇号来转义它,比如 : ''xxx。顺便说一句,它在文档中:

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

于 2017-11-27T09:49:27.127 回答
3

这是因为你有'你的字符串。你需要逃避它,否则你会错过一个。

于 2017-11-27T09:49:04.757 回答