使用 java.text.NumberFormat 解析日本货币字符串
Posted
技术标签:
【中文标题】使用 java.text.NumberFormat 解析日本货币字符串【英文标题】:Parse Japanese currency String with java.text.NumberFormat 【发布时间】:2011-05-06 12:44:04 【问题描述】:我在用 Java 解析日本货币字符串时遇到问题。日元符号似乎与 java 认为的不匹配。这是我的代码:
NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
Number n = f.parse(s);
这会抛出异常:
Exception in thread "main" java.text.ParseException: Unparseable number: "¥200"
at java.text.NumberFormat.parse(NumberFormat.java:333)
似乎java对日元使用了不同的符号(“\uFFE5”)
有人可以帮忙吗? 谢谢
【问题讨论】:
【参考方案1】:尝试将字符“¥”(0xC2A5)更改为“¥”(0xEFBFA5)。 "¥"(0xC2A5) 是日语语言环境中的特殊字符。
【讨论】:
谢谢。我试过了,0xEFBFA5 ( char 65509 ) 是正确的。但是在 Java 中它不会产生 ¥ 符号。而是一个正方形。也可以在这里查看:fileformat.info/info/unicode/char/ffe5/index.htm【参考方案2】:NumberFormat f = NumberFormat.getCurrencyInstance(Locale.UK);
String s = "£200";
Number n = f.parse(s);
与
NumberFormat f = NumberFormat.getCurrencyInstance(Locale.US);
String s = "$200";
Number n = f.parse(s);
会有同样的效果。 NumberFormat 适用于数字,而不适用于字符串字符,即,如果您允许 NumberFormat 仅解析整数(默认值),则需要删除货币符号。你可以这样做:
NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPAN);
String s = "¥200";
f.setParseIntegerOnly(false);
Number n = f.parse(s);
这将允许日元字符通过。用 $ 尝试它,它失败了。但是将本地更改为美国,允许使用美元,而不允许使用日元。
【讨论】:
嗨palentjones,我认为你有一个错误。如果您正确设置了语言环境,$ 和 £ 显然可以与我的代码一起使用(因此您的示例可以正常工作......)。请注意,我正在获取 NumberFormat 的货币实例。 嗯。我同意我不知道这里发生了什么。我认为它似乎正在为日本开发日元,例如这有效: NumberFormat f = NumberFormat.getCurrencyInstance(Locale.JAPANESE); f.setCurrency(Currency.getInstance("JPY"));字符串 s = "JPY 200";数字 n = f.parse(s);以上是关于使用 java.text.NumberFormat 解析日本货币字符串的主要内容,如果未能解决你的问题,请参考以下文章