使用java.text.NumberFormat解析日本货币字符串

sha*_*dor 2 java unicode cjk number-formatting

我在用Java解析日语货币字符串时遇到问题。日元符号似乎与Java认为的符号不匹配。这是我的代码:

NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
Number n = f.parse(s);
Run Code Online (Sandbox Code Playgroud)

这将引发异常:

Exception in thread "main" java.text.ParseException: Unparseable number: "¥200"
at java.text.NumberFormat.parse(NumberFormat.java:333)
Run Code Online (Sandbox Code Playgroud)

似乎Java为日元使用了不同的符号(“ \ uFFE5”)

有人可以帮忙吗?谢谢

pla*_*nes 5

NumberFormat f = NumberFormat.getCurrencyInstance(Locale.UK);
        String s = "£200";
        Number n = f.parse(s);
Run Code Online (Sandbox Code Playgroud)

    NumberFormat f = NumberFormat.getCurrencyInstance(Locale.US);
    String s = "$200";
    Number n = f.parse(s);
Run Code Online (Sandbox Code Playgroud)

会产生相同的影响。NumberFormat适用于数字,而不适用于字符串字符;即,如果允许NumberFormat仅解析整数(默认值),则需要删除货币符号。您可以执行以下操作:

NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
f.setParseIntegerOnly(false);
Number n = f.parse(s);
Run Code Online (Sandbox Code Playgroud)

这将使日元字符通过。用$尝试它失败。但是将本地货币更改为美国,则允许美元,但不允许日元。


小智 5

尝试将字符“\xc2\xa5”(0xC2A5)更改为“\xef\xbf\xa5”(0xEFBFA5)。
\n"\xc2\xa5"(0xC2A5) 是日语语言环境中的特殊字符。

\n