невозможно разобрать текст с помощью MessageFormat

Я пытаюсь использовать класс MessageFormat для анализа сообщения. Но я получаю ошибку синтаксического анализа MessageFormat!. Я получил этот код из Интернета. Вот ссылка:

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, number, #.#}, {1, number, #.##}"); 
        ; 

        // 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, 20.325, 30.444

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

Почему я получаю эту ошибку и как ее решить? Спасибо.


person Taufiq Naziruddin    schedule 29.01.2021    source источник


Ответы (2)


Я изменил параметры в конструкторе на это

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

Вывод консоли выглядит следующим образом:

10.456, 20.325, 30.444
Parsed value are :
10.456
30.444
20.325
person xingxing    schedule 29.01.2021

Как всегда, при возникновении проблем с синтаксическим анализом попробуйте выполнить обратную операцию, чтобы увидеть, когда ожидается ввод данных для синтаксического анализа. Это общее правило, применимое к XML, JSON, Dates и MessageFormat.

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

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

Вывод

 10456,  20325,  30444

Как видите, в выводе есть начальные пробелы. Если мы изменим на:

String str = " 10.456,  20.325,  30.444"; 

Тогда все работает.

Вывод

 10.456,  20.325,  30.444
Parsed value are :
10.456
30.444
20.325
person Andreas    schedule 29.01.2021