没有获取特定区域设置的货币符号

我试图根据他们的Locale获取货币的符号。 但它没有返回符号,而是返回代码。 我有一个片段:

import java.util.Currency; import java.util.Locale; public class CurrencyFormat { public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println("United States: " + currency.getSymbol()); } public static void main(String[] args) { new CurrencyFormat().displayCurrencySymbols(); } } 

对于Locale.US,它给出符号$但是如果我替换

 Currency currency = Currency.getInstance(Locale.US); 

 Currency currency = Currency.getInstance(Locale.GERMANY); 

然后代替符号,它给出了国家代码。 为什么这样以及我们如何获得符号?

编辑:看了一些答案之后我想清楚设置一些特定的默认本地不是解决方案,因为我需要一次显示所有可用的符号

例如

  Locale.setDefault(Locale.UK); 

会给我欧元符号但是对于doller它会给代码而不是doller符号($)。

嗨,请尝试以下代码

 import java.text.NumberFormat; import java.util.Comparator; import java.util.Currency; import java.util.Locale; import java.util.SortedMap; import java.util.TreeMap; public class CurrencyExample { public static void main(String[] args) { Utils.getCurrencySymbol( Currency.getInstance(Locale.US).getCurrencyCode()); Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN).getCurrencyCode()); Utils.getCurrencySymbol(Currency.getInstance(Locale.UK).getCurrencyCode()); Utils.getCurrencySymbol("INR"); } } class Utils{ public static SortedMap currencyLocaleMap; static { currencyLocaleMap = new TreeMap(new Comparator() { public int compare(Currency c1, Currency c2){ return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); } }); for (Locale locale : Locale.getAvailableLocales()) { try { Currency currency = Currency.getInstance(locale); currencyLocaleMap.put(currency, locale); }catch (Exception e){ } } } public static String getCurrencySymbol(String currencyCode) { Currency currency = Currency.getInstance(currencyCode); System.out.println( currencyCode+ ":-" + currency.getSymbol(currencyLocaleMap.get(currency))); return currency.getSymbol(currencyLocaleMap.get(currency)); } } 

上述程序的输出是这样的:

 USD:-$ JPY:-¥ GBP:-£ INR:-Rs. 

您正在看到Java认为您的默认语言环境中的用户期望查看货币符号的内容。 Javadocs也为getSymbol()确认了这一点:

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

通过更改默认语言环境:

 Locale.setDefault(Locale.UK); // eg 

您可以尝试自己certificate这一点。 ( 注意:我不是建议这是一个解决方案,只是一个机会让你检查其他语言环境看到的内容 )。

我建议您坚持使用Java认为适合您的默认语言环境的任何内容 – 我确信您的用户可以理解这一点。


寻找每种货币的“正常”货币符号似乎很有吸引力,但请查看以下货币清单: http : //www.xe.com/symbols.php 。

看看有多少国家用$符号识别他们的货币。 埃及也使用英镑符号( £ )。 语言环境货币符号背后的整个想法是为您提供一个字符串, 您的语言环境中的用户将理解该字符串。

一个更简单的解决方案,基于Amrit Raj Sharma的回答:

只需将语言环境作为参数添加到getSymbol()方法即可。

因此,将您的代码更改为:

 import java.util.Currency; import java.util.Locale; public class CurrencyFormat { public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println("United States: " + currency.getSymbol(Locale.US)); } public static void main(String[] args) { new CurrencyFormat().displayCurrencySymbols(); } }