ISO 4217 数値通貨コードがあります。840
通貨名を取得したい:USD
私はこれをやろうとしています:
Currency curr1 = Currency.getInstance("840");
しかし、私は得続けます
java.lang.IllegalArgumentException
直し方?何か案は?
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");
}
それを行うより良い方法:
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 クラスのソース コードを参照してください。
「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);
}