MessageFormat是在JAVA中经常用来定制消息的一个基础类,用户可以定义消息的模板,利用运行时的变量来填补模板中的占位符(Place Holder),以达到灵活的输出。但是如果新手不太注意很容易会碰到如上的错误信息,请看下面这段代码:


import java.text.MessageFormat;
public class TestMessageFormat {
    public static void main(String[] args) {
        System.out.println(MessageFormat.format("The username cannot contain any of these characters: (){}",null));
    }                        
}

这段小程序仅仅用来输出提醒用户用户名不能包含(){}这四个符号,但是就会出现如上的错误。究其原因就在于那对中括号,在MessageFormat中它是用来表示占位符的,如{0},{1}。它会去解析括号中间的序号,在上述情况中括号间没有数字,因此导致了不能解析的错误。

解决方法很简单,就是类似字符串中的转义字符,不同的是这里用的是单引号('),代码修改如下:

import java.text.MessageFormat;
public class TestMessageFormat {
    public static void main(String[] args) {
        System.out.println(MessageFormat.format("The username cannot contain any of these characters: ()'{'}", null));
    }
}

由于单引号也是特殊符号,这里如果想要在输出的信息中显示单引号则需要打两个单引号~