Java 获取所有可能的可用货币
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3536968/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get All Possible Available Currencies
提问by Cheok Yan Cheng
I would like to get all possible available currencies.
我想获得所有可能的可用货币。
Java 7 had provided such feature.
Java 7 就提供了这样的特性。
public static Set<java.util.Currency> java.util.Currency.getAvailableCurrencies()
However, I am still using Java 6 for development and deployment. May I know how I can get all possible available currencies? Code example are most welcomed.
但是,我仍然使用 Java 6 进行开发和部署。我可以知道如何获得所有可能的可用货币吗?代码示例最受欢迎。
采纳答案by Baltasarq
After studying the ISO table and the Currency class documentation, it seems that you can ask for currency as code or as Locale; and the class Locale has a getAvailableLocales()
method.
研究了ISO表和Currency类文档,好像可以要求货币作为code或者Locale;并且类 Locale 有一个getAvailableLocales()
方法。
So, the code would be:
所以,代码将是:
public static Set<Currency> getAllCurrencies()
{
Set<Currency> toret = new HashSet<Currency>();
Locale[] locs = Locale.getAvailableLocales();
for(Locale loc : locs) {
try {
Currency currency = Currency.getInstance( loc );
if ( currency != null ) {
toret.add( currency );
}
} catch(Exception exc)
{
// Locale not found
}
}
return toret;
}
Hope this helps.
希望这可以帮助。
回答by eldur
Combine the ISO 4217(xml) definition with your requirements and the sample from openJDK7 if you want allCurrencies. If you iterate over the default Locales you only get 78 of 180 defined by ISO 4217.
结合ISO 4217(XML如果你想)你的需求定义和openJDK7样品所有货币。如果您迭代默认的语言环境,您只会得到 ISO 4217 定义的 180 个语言环境中的 78 个。
String[] viaLocales = { "JPY", "CNY", "SDG", "RON", "MKD", "MXN", "CAD",
"ZAR", "AUD", "NOK", "ILS", "ISK", "SYP", "LYD", "UYU", "YER", "CSD",
"EEK", "THB", "IDR", "LBP", "AED", "BOB", "QAR", "BHD", "HNL", "HRK",
"COP", "ALL", "DKK", "MYR", "SEK", "RSD", "BGN", "DOP", "KRW", "LVL",
"VEF", "CZK", "TND", "KWD", "VND", "JOD", "NZD", "PAB", "CLP", "PEN",
"GBP", "DZD", "CHF", "RUB", "UAH", "ARS", "SAR", "EGP", "INR", "PYG",
"TWD", "TRY", "BAM", "OMR", "SGD", "MAD", "BYR", "NIO", "HKD", "LTL",
"SKK", "GTQ", "BRL", "EUR", "HUF", "IQD", "CRC", "PHP", "SVC", "PLN",
"USD" };
String[] iso4217WithoutViaLocales = { "XBB", "XBC", "XBD", "UGX", "MOP",
"SHP", "TTD", "UYI", "KGS", "DJF", "BTN", "XBA", "HTG", "BBD", "XAU",
"FKP", "MWK", "PGK", "XCD", "COU", "RWF", "NGN", "BSD", "XTS", "TMT",
"GEL", "VUV", "FJD", "MVR", "AZN", "MNT", "MGA", "WST", "KMF", "GNF",
"SBD", "BDT", "MMK", "TJS", "CVE", "MDL", "KES", "SRD", "LRD", "MUR",
"CDF", "BMD", "USN", "CUP", "USS", "GMD", "UZS", "CUC", "ZMK", "NPR",
"NAD", "LAK", "SZL", "XDR", "BND", "TZS", "MXV", "LSL", "KYD", "LKR",
"ANG", "PKR", "SLL", "SCR", "GHS", "ERN", "BOV", "GIP", "IRR", "XPT",
"BWP", "XFU", "CLF", "ETB", "STD", "XXX", "XPD", "AMD", "XPF", "JMD",
"MRO", "BIF", "CHW", "ZWL", "AWG", "MZN", "CHE", "XOF", "KZT", "BZD",
"XAG", "KHR", "XAF", "GYD", "AFN", "SOS", "TOP", "AOA", "KPW" };
回答by hanoo
Otherwise a version a little better of Baltasarq code to avoid duplication:
否则,请使用更好的 Baltasarq 代码版本以避免重复:
ArrayList<String> currencys = new ArrayList<String>();
Locale[] locs = Locale.getAvailableLocales();
for(Locale loc : locs) {
try {
String val=Currency.getInstance(loc).getCurrencyCode();
if(!currencys.contains(val))
currencys.add(val);
} catch(Exception exc)
{
// Locale not found
}
Collections.sort(currencys);
}
I have tested on android.
我已经在安卓上测试过了。
回答by mahesh nanayakkara
Use JodaMoney. Inside joda-money.jar I find MoneyData.csv It has all ISO 4217 currencies. Use org.joda.money.CurrencyUnitto pull currencies.
使用JodaMoney。在 joda-money.jar 中,我发现 MoneyData.csv 它包含所有 ISO 4217 货币。使用org.joda.money.CurrencyUnit来拉取货币。
`
`
public static void main(String[] args) {
List<CurrencyUnit> currencyUnits = CurrencyUnit.registeredCurrencies();
for (CurrencyUnit currencyUnit : currencyUnits) {
System.out.println(
currencyUnit.getCode() +" " +
currencyUnit.getNumericCode() + " "+
currencyUnit.getNumeric3Code()+ " "+
currencyUnit.getCountryCodes());
}
`
`
回答by José Mendes
I am using the Currency java class but I was not able to find the Currency of Afghanistan (AFN), so I was not sure if I could rely on this Currency Library
. To fix this I am using the joda-money
library.
我正在使用 Currency java 类,但我无法找到阿富汗货币 (AFN),所以我不确定是否可以依赖它Currency Library
。为了解决这个问题,我正在使用joda-money
库。
So I put in my pom.xml
this:
所以我把我的pom.xml
这个:
<dependency>
<groupId>org.joda</groupId>
<artifactId>joda-money</artifactId>
<version>0.11</version>
</dependency>
<dependency>
<groupId>org.joda</groupId>
<artifactId>joda-money</artifactId>
<version>0.11</version>
</dependency>
And in my code I use this:
在我的代码中,我使用了这个:
List<CurrencyUnit> currencyUnits = CurrencyUnit.registeredCurrencies();
List<CurrencyUnit> currencyUnits = CurrencyUnit.registeredCurrencies();
to get all Currencies, and the AFN was there so I am using this library now.
获取所有货币,AFN 就在那里,所以我现在正在使用这个库。
I hope it can help.
我希望它能有所帮助。
回答by Sojan P R
This may be helpful for those who want to get it as a Java enumeration
这可能对那些希望将其作为 Java 枚举获取的人有所帮助
public enum Currency {
AED("AED"), AFN("AFN"), ALL("ALL"), AMD("AMD"), ANG("ANG"), AOA("AOA"), ARS("ARS"), AUD("AUD"), AWG("AWG"), AZN("AZN"), BAM("BAM"), BBD("BBD"),
BDT("BDT"), BGN("BGN"), BHD("BHD"), BIF("BIF"), BMD("BMD"), BND("BND"), BOB("BOB"), BOV("BOV"), BRL("BRL"), BSD("BSD"), BTN("BTN"), BWP("BWP"),
BYN("BYN"), BYR("BYR"), BZD("BZD"), CAD("CAD"), CDF("CDF"), CHE("CHE"), CHF("CHF"), CHW("CHW"), CLF("CLF"), CLP("CLP"), CNY("CNY"), COP("COP"),
COU("COU"), CRC("CRC"), CUC("CUC"), CUP("CUP"), CVE("CVE"), CZK("CZK"), DJF("DJF"), DKK("DKK"), DOP("DOP"), DZD("DZD"), EGP("EGP"), ERN("ERN"),
ETB("ETB"), EUR("EUR"), FJD("FJD"), FKP("FKP"), GBP("GBP"), GEL("GEL"), GHS("GHS"), GIP("GIP"), GMD("GMD"), GNF("GNF"), GTQ("GTQ"), GYD("GYD"),
HKD("HKD"), HNL("HNL"), HRK("HRK"), HTG("HTG"), HUF("HUF"), IDR("IDR"), ILS("ILS"), INR("INR"), IQD("IQD"), IRR("IRR"), ISK("ISK"), JMD("JMD"),
JOD("JOD"), JPY("JPY"), KES("KES"), KGS("KGS"), KHR("KHR"), KMF("KMF"), KPW("KPW"), KRW("KRW"), KWD("KWD"), KYD("KYD"), KZT("KZT"), LAK("LAK"),
LBP("LBP"), LKR("LKR"), LRD("LRD"), LSL("LSL"), LYD("LYD"), MAD("MAD"), MDL("MDL"), MGA("MGA"), MKD("MKD"), MMK("MMK"), MNT("MNT"), MOP("MOP"),
MRO("MRO"), MUR("MUR"), MVR("MVR"), MWK("MWK"), MXN("MXN"), MXV("MXV"), MYR("MYR"), MZN("MZN"), NAD("NAD"), NGN("NGN"), NIO("NIO"), NOK("NOK"),
NPR("NPR"), NZD("NZD"), OMR("OMR"), PAB("PAB"), PEN("PEN"), PGK("PGK"), PHP("PHP"), PKR("PKR"), PLN("PLN"), PYG("PYG"), QAR("QAR"), RON("RON"),
RSD("RSD"), RUB("RUB"), RWF("RWF"), SAR("SAR"), SBD("SBD"), SCR("SCR"), SDG("SDG"), SEK("SEK"), SGD("SGD"), SHP("SHP"), SLL("SLL"), SOS("SOS"),
SRD("SRD"), SSP("SSP"), STD("STD"), SYP("SYP"), SZL("SZL"), THB("THB"), TJS("TJS"), TMT("TMT"), TND("TND"), TOP("TOP"), TRY("TRY"), TTD("TTD"),
TWD("TWD"), TZS("TZS"), UAH("UAH"), UGX("UGX"), USD("USD"), USN("USN"), UYI("UYI"), UYU("UYU"), UZS("UZS"), VEF("VEF"), VND("VND"), VUV("VUV"),
WST("WST"), XAF("XAF"), XAG("XAG"), XAU("XAU"), XBA("XBA"), XBB("XBB"), XBC("XBC"), XBD("XBD"), XCD("XCD"), XDR("XDR"), XFU("XFU"), XOF("XOF"),
XPD("XPD"), XPF("XPF"), XPT("XPT"), XSU("XSU"), XTS("XTS"), XUA("XUA"), XXX("XXX"), YER("YER"), ZAR("ZAR"), ZMW("ZMW");
private String iso4217Code = "";
Currency(String code) {
this.iso4217Code = code;
}
@Override
public String toString() {
return iso4217Code;
}
}
回答by Chavjoh
You can also use the library nv-i18n
available on maven:
您还可以使用nv-i18n
Maven 上可用的库:
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.22</version>
</dependency>
To see all currency codes with it, you just have to use:
要使用它查看所有货币代码,您只需使用:
for (CurrencyCode code : CurrencyCode.values()) {
System.out.format("[%s] %03d %s\n", code, code.getNumeric(), code.getName());
}
You can see more details about this class and library here: http://takahikokawasaki.github.io/nv-i18n/
您可以在此处查看有关此类和库的更多详细信息:http: //takahikokawasaki.github.io/nv-i18n/
回答by Quintin Balsdon
I have been using Baltasarq's answer and I find it slows down my app due to a number of java.lang.IllegalArgumentException's being thrown, which is no fault of his, but actually the author of the Currency library, who has elected to throw an exception as opposed to an error (Raw Code).
我一直在使用 Baltasarq 的答案,我发现由于抛出了许多 java.lang.IllegalArgumentException,它减慢了我的应用程序的速度,这不是他的错,但实际上是 Currency 库的作者,他选择了抛出异常而不是错误(原始代码)。
However looking into that Library, there is a public static method getAvailableCurrencies
which will give you all the available currencies as a set without having to loop through all the available locales and throw a bunch of exceptions.
但是查看该库,有一个公共静态方法getAvailableCurrencies
可以为您提供所有可用货币作为一个集合,而无需遍历所有可用语言环境并抛出一堆异常。
The revised code now looks like this:
修改后的代码现在看起来像这样:
public static Set<Currency> getAllCurrencies() {
Set<Currency> currencies = Currency.getAvailableCurrencies();
return currencies;
}
Which of course, is silly, you can just as well use the Currency's own static method and save yourself an unnecessary method call. #SaveTheStack
当然,这很愚蠢,您也可以使用 Currency 自己的静态方法并为自己节省不必要的方法调用。#SaveTheStack