Получить все возможные варианты валют
Я хотел бы получить все возможные доступные валюты.
Java 7 предоставила такую возможность.
public static Set<java.util.Currency> java.util.Currency.getAvailableCurrencies()
Однако я все еще использую Java 6 для разработки и развертывания. Могу ли я узнать, как я могу получить все возможные доступные валюты? Пример кода наиболее приветствуется.
Ответы
Ответ 1
После изучения таблицы ISO и документации класса "Валюта" кажется, что вы можете запросить валюту в качестве кода или как Locale; и класс Locale имеет метод getAvailableLocales()
.
Итак, код будет выглядеть следующим образом:
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;
}
Надеюсь, что это поможет.
Ответ 2
Объедините ISO 4217 (xml) с вашими требованиями и образцом из openJDK7, если вы хотите все Валюты. Если вы перебираете по умолчанию Locales, вы получаете только 78 из 180, определенных ISO 4217.
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" };
Ответ 3
Это может быть полезно для тех, кто хочет получить его как перечисление 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;
}
}
Ответ 4
В противном случае версия немного лучше кода 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);
}
Я тестировал на андроиде.
Ответ 5
Используйте 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());
}
`
Ответ 6
Я использую класс java Currency, но я не смог найти валюту Афганистана (AFN), поэтому я не был уверен, могу ли я положиться на этот Currency Library
. Чтобы исправить это, я использую библиотеку joda-money
.
Итак, я ввел в свой pom.xml
это:
<dependency>
<groupId>org.joda</groupId>
<artifactId>joda-money</artifactId>
<version>0.11</version>
</dependency>
И в моем коде я использую это:
List<CurrencyUnit> currencyUnits = CurrencyUnit.registeredCurrencies();
чтобы получить все валюты, и AFN был там, поэтому я использую эту библиотеку сейчас.
Надеюсь, это поможет.
Ответ 7
Вы также можете использовать библиотеку nv-i18n
, доступную на maven:
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.22</version>
</dependency>
Чтобы просмотреть все коды валют, вам просто нужно использовать:
for (CurrencyCode code : CurrencyCode.values()) {
System.out.format("[%s] %03d %s\n", code, code.getNumeric(), code.getName());
}
Подробнее об этом классе и библиотеке вы можете узнать здесь:
http://takahikokawasaki.github.io/nv-i18n/
Ответ 8
Я использую ответ Baltasarq, и я нахожу, что это замедляет мое приложение из-за того, что вызывается несколько java.lang.IllegalArgumentException, что не является ошибкой его, но на самом деле является автором библиотеки Currency, которая выбрала генерирует исключение в отличие от ошибки (Raw Code).
Однако, просматривая эту библиотеку, существует общедоступный статический метод getAvailableCurrencies
, который предоставит вам все доступные валюты в виде набора без необходимости перебирать все доступные локали и бросать кучу исключений.
Пересмотренный код теперь выглядит следующим образом:
public static Set<Currency> getAllCurrencies() {
Set<Currency> currencies = Currency.getAvailableCurrencies();
return currencies;
}
Что, конечно, глупо, вы можете просто использовать собственный статический метод Currency и избавить себя от ненужного вызова метода. #SaveTheStack