无法使用 MessageFormat 解析文本

问题描述

我正在尝试使用 messageformat 类来解析消息。但我收到“messageformat 解析错误!”。我从互联网上得到了这个代码。这是link

package myy.test;
import java.text.messageformat;
import java.text.ParseException;

public class TestParse {

public static void main(String[] args) {
    // Todo Auto-generated method stub
    try { 
        // creating and initializing  messageformat 
        messageformat mf 
            = new messageformat("{0,number,#},{2,#.#},{1,#.##}"); 
        ; 

        // creating and initializing String source 
        String str = "10.456,20.325,30.444"; 
        System.out.println(str); 
        // parsing the string 
        // accoridng to messageformat 
        // using parse() method 
        Object[] hash = mf.parse(str); 

        // display the result 
        System.out.println("Parsed value are :"); 
        for (int i = 0; i < hash.length; i++) 
            System.out.println(hash[i]); 
    } 
    catch (ParseException e) { 
        System.out.println("\nString is Null"); 
        System.out.println("Exception thrown : " + e); 
    } 

}
}

我在控制台中得到以下输出

10.456,30.444

String is Null
Exception thrown : java.text.ParseException: messageformat parse error!

为什么会出现此错误以及如何解决?谢谢。

解决方法

我把构造函数中的参数改成了这个

MessageFormat mf = new MessageFormat("{0,number,#,###.##},{2,{1,###.##}");

Consolo 输出是这样的:

10.456,20.325,30.444
Parsed value are :
10.456
30.444
20.325
,

与以往一样,遇到解析问题时,请尝试执行相反的操作以查看解析期望的输入时间。这是适用于 XML、JSON、日期和 MessageFormat 的一般准则。

MessageFormat mf 
    = new MessageFormat("{0,#},#.#},#.##}"); 
; 

System.out.println(mf.format(new Integer[] { 10456,30444,20325 }));

输出

 10456,20325,30444

如您所见,输出有前导空格。如果我们改为:

String str = " 10.456,30.444"; 

然后一切正常。

输出

 10.456,30.444
Parsed value are :
10.456
30.444
20.325