Получить все возможные варианты валют

Я хотел бы получить все возможные доступные валюты.

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