Java:基于ISO 4217货币cod的货币符号

程序下方打印出ISO 4217货币代码的货币符号。

import java.util.*; public class Currency{ public static void main(String args[]) { Currency myInstance = Currency.getInstance(args[0]); System.out.println(myInstance.getSymbol()); } } 

问题 :输入字符串USD时工作正常。 对于像EUR这样的其他输入,只需返回货币代码。

样本输入,来自程序的输出:

 input: java Currency USD output: $ input: java Currency EUR output: EUR -> I expect the symbol of Euro here 

Currency.getSymbol()返回相对于默认语言环境的货币符号。

获取默认语言环境的此货币的符号。 例如,对于美元,如果默认区域设置是美国,则符号为"$" ,而对于其他区域设置,符号为"US$" 。 如果无法确定符号,则返回ISO 4217货币代码。

如果要将符号用于其他语言环境,请使用Currency.getSymbol(Locale locale)

 System.out.println( Currency.getInstance("USD").getSymbol(Locale.US) ); // prints $ System.out.println( Currency.getInstance("USD").getSymbol(Locale.FRANCE) ); // prints USD System.out.println( Currency.getInstance("EUR").getSymbol(Locale.US) ); // prints EUR System.out.println( Currency.getInstance("EUR").getSymbol(Locale.FRANCE) ); // prints € 

( 另见ideone.com )。

对我来说,即使在第一种情况下,您的代码也会返回USD。 这看起来,货币在很大程度上取决于JRE版本(对我来说是1.6)。 Perosnally我建议你编写自己的CUR到符号转换模块 – 比尝试使用这个模块容易得多。

如果有人需要它反过来(例如€ – > EUR)

 String currency = €; String currencyCode = ""; for (Currency c : Currency.getAvailableCurrencies()) { if (c.getSymbol().equals(currency)) { currencyCode = c.toString(); } } 

使用有限的Locale枚举仅适用于西化符号。 如果您希望使用以下提供的语言环境进行更全面的尝试:

 Locale[] locales = Locale.getAvailableLocales(); 

使用此列表中的Locales给出符号而不是TLA非常一致。