2010-08-21 13 views
15

Me gustaría obtener todas las monedas posibles disponibles.Obtener todas las posibles monedas disponibles

Java 7 había proporcionado dicha característica.

public static Set<java.util.Currency> java.util.Currency.getAvailableCurrencies() 

Sin embargo, todavía estoy usando Java 6 para desarrollo e implementación. ¿Puedo saber cómo puedo obtener todas las monedas disponibles posibles? El ejemplo del código es muy bienvenido.

Respuesta

21

Después de estudiar la tabla ISO y la documentación de la clase de moneda, parece que se puede pedir la moneda como código o como configuración regional; y la clase Locale tiene un método getAvailableLocales().

Por lo tanto, el código sería:

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; 
    } 

Espero que esto ayude.

+0

Gracias por la respuesta, tengo una pregunta. Escribí este código, todo funciona bien, pero no puedo encontrar la Moneda AFN de Afganistán, ¿el problema es solo conmigo? ¿Tienes algún consejo para mí? Gracias –

+0

Estoy usando ahora la biblioteca joda-money, eso solucionó el problema. Gracias –

+1

Recomiendo probar que 'Currency.getInstance (Locale locale)' no devuelve 'null' antes de agregar el resultado a su conjunto. Desde [javadocs] (https://docs.oracle.com/javase/7/docs/api/java/util/Currency.html#getInstance (java.util.Locale)): "El método devuelve null para los territorios que no tengo una moneda, como la Antártida ". – snark

9

Combinar la definición ISO 4217 (xml) con sus requisitos y la muestra de openJDK7 si quieres todos Monedas. Si iterar sobre las configuraciones regionales predeterminadas que sólo recibe 78 de 180 definido por la norma 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" }; 
2

De lo contrario una versión un poco mejor de código Baltasarq para evitar la duplicación:

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); 
    } 

he probado en android.

+0

La respuesta de Baltasarq evita la duplicación mediante el uso de un conjunto, que sobrescribe las entradas cuando ya existen. Además, usa un 'HashSet', que también suele ser más rápido que ejecutar' contains (...) 'en una lista de arreglos. – Sergio

0

Use JodaMoney. Dentro de joda-money.jar encuentro MoneyData.csv Tiene todas las monedas ISO 4217. Use org.joda.money.CurrencyUnit para tirar de las monedas.

`

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()); 
    } 

`

0

Estoy utilizando la clase Java de divisas, pero yo no era capaz de encontrar la moneda de Afganistán (AFN), así que no estaba seguro de si podría confiar en esta Currency Library. Para arreglar esto, estoy usando la biblioteca joda-money.

por lo que poner en mi pom.xml esto:

<dependency> <groupId>org.joda</groupId> <artifactId>joda-money</artifactId> <version>0.11</version> </dependency>

Y en mi código que utilizo esto:

List<CurrencyUnit> currencyUnits = CurrencyUnit.registeredCurrencies();

para conseguir todas las monedas, y el AFN estaba allí, así que Estoy usando esta biblioteca ahora.

Espero que pueda ayudar.

5

Esto puede ser útil para aquellos que quieren conseguirlo como una enumeración de 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; 
    } 
} 
0

También puede utilizar la biblioteca nv-i18n disponibles en Maven:

<dependency> 
    <groupId>com.neovisionaries</groupId> 
    <artifactId>nv-i18n</artifactId> 
    <version>1.22</version> 
</dependency> 

Para ver todos los códigos de moneda con solo tienes que usar:

for (CurrencyCode code : CurrencyCode.values()) { 
    System.out.format("[%s] %03d %s\n", code, code.getNumeric(), code.getName()); 
} 

Puedes ver más detalles abo ut esta clase y la biblioteca aquí: http://takahikokawasaki.github.io/nv-i18n/

0

He estado usando la respuesta de Baltasarq y me parece que ralentiza mi aplicación debido a una serie de java.lang.IllegalArgumentException de ser lanzado, que no es culpa suya, pero en realidad el autor de la biblioteca de Monedas, que ha elegido lanzar una excepción en lugar de un error (Raw Code).

Sin embargo mirar en esa biblioteca, hay un método estático público getAvailableCurrencies que le dará todas las monedas disponibles como un conjunto sin tener que recorrer todos los lugares disponibles y lanzar un montón de excepciones.

El código revisado ahora se ve así:

public static Set<Currency> getAllCurrencies() { 
    Set<Currency> currencies = Currency.getAvailableCurrencies(); 
    return currencies; 
} 

cual, por supuesto, es tonto, se puede usar igual de bien propio método estático de la Moneda y ahorrarse una llamada al método innecesario. #SaveTheStack

Cuestiones relacionadas