9

ISO 4217 数値通貨コードがあります。840

通貨名を取得したい:USD

私はこれをやろうとしています:

 Currency curr1 = Currency.getInstance("840");

しかし、私は得続けます

java.lang.IllegalArgumentException

直し方?何か案は?

4

4 に答える 4

12

java.util.Currency.getInstanceは ISO 4217 通貨コードのみをサポートし、通貨番号はサポートしていません。ただし、メソッドを使用してすべての通貨を取得し、getAvailableCurrenciesメソッドの結果を比較してコード 840 の通貨を検索できますgetNumericCode

このような:

public static Currency getCurrencyInstance(int numericCode) {
    Set<Currency> currencies = Currency.getAvailableCurrencies();
    for (Currency currency : currencies) {
        if (currency.getNumericCode() == numericCode) {
            return currency;
        }
    }
    throw new IllegalArgumentException("Currency with numeric code "  + numericCode + " not found");
}
于 2014-11-04T12:15:04.647 に答える
2

それを行うより良い方法:

public class CurrencyHelper {

    private static Map<Integer, Currency> currencies = new HashMap<>();

    static {
        Set<Currency> set = Currency.getAvailableCurrencies();
        for (Currency currency : set) {
             currencies.put(currency.getNumericCode(), currency);
        }
    }

    public static Currency getInstance(Integer code) {
        return currencies.get(code);
    }
}

少しの作業で、キャッシュをより効率的にすることができます。詳細については、Currency クラスのソース コードを参照してください。

于 2018-11-25T02:24:51.217 に答える
0

「USD」のようなコードを提供する必要があり、通貨オブジェクトが返されます。JDK 7 を使用している場合は、次のコードを使用できます。JDK 7 にはメソッド getAvailableCurrencies() があります

public static Currency getCurrencyByCode(int code) {
    for(Currency currency : Currency.getAvailableCurrencies()) {
        if(currency.getNumericCode() == code) {
            return currency;
        }
    }
    throw new IllegalArgumentException("Unkown currency code: " + code);
}
于 2014-11-04T12:17:44.690 に答える