2010-08-21 5 views
15

Je voudrais obtenir toutes les devises disponibles possibles.Obtenez toutes les devises disponibles possibles

Java 7 avait fourni une telle fonctionnalité.

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

Cependant, j'utilise toujours Java 6 pour le développement et le déploiement. Puis-je savoir comment je peux obtenir toutes les devises disponibles? Les exemples de code sont les bienvenus.

Répondre

21

Après avoir étudié la table ISO et la documentation de la classe des devises, il semble que vous pouvez demander la devise code ou Locale; et la classe Locale a une méthode getAvailableLocales().

Ainsi, le code serait:

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

Hope this helps.

+0

Merci pour la réponse, j'ai une question. J'ai écrit ce code, tout fonctionne bien, mais je ne peux pas trouver la monnaie AFN de l'Afghanistan, le problème est seulement avec moi? Avez-vous des conseils pour moi? Merci –

+0

J'utilise maintenant la bibliothèque joda-money, qui a résolu le problème. Merci –

+1

Je vous recommande de tester que 'Currency.getInstance (Locale locale)' ne retourne pas 'null' avant d'ajouter le résultat à votre ensemble. De la [javadocs] (https://docs.oracle.com/javase/7/docs/api/java/util/Currency.html#getInstance (java.util.Locale)): "La méthode renvoie null pour les territoires qui n'ont pas de monnaie, comme l'Antarctique. " – snark

9

Combine la définition de vos besoins et l'échantillon de openJDK7 ISO 4217 (xml) si vous voulez tous Devises. Si vous itérer sur les versions localisées par défaut que vous obtenez seulement 78 de 180 défini par la norme 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

Sinon une version un peu mieux code Baltasarq pour éviter les doubles emplois:

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

Je l'ai testé sur android.

+0

La réponse de Baltasarq évite la duplication en utilisant un ensemble, qui écrase les entrées lorsqu'elles existent déjà. En outre, il utilise un 'HashSet', qui est généralement plus rapide que l'exécution de' contains (...) 'dans une liste de tableaux. – Sergio

0

Utilisez JodaMoney. À l'intérieur joda-money.jar je trouve MoneyData.csv Il a toutes les monnaies ISO 4217. Utilisez org.joda.money.CurrencyUnit pour tirer des devises.

`

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

J'utilise la classe Monnaie de java, mais je ne pouvais pas trouver la monnaie de l'Afghanistan (APN), donc je ne sais pas si je pouvais compter sur cette Currency Library. Pour résoudre ce problème, j'utilise la bibliothèque joda-money.

Je mets dans mon pom.xml ceci:

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

Et dans mon code que j'utilise ceci:

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

pour obtenir toutes les devises, et l'APN était là, donc je j'utilise cette bibliothèque maintenant.

J'espère que cela peut aider.

5

Cela peut être utile pour ceux qui veulent l'obtenir comme une énumération 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

Vous pouvez également utiliser la bibliothèque nv-i18n disponible sur Maven:

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

Pour voir tous les codes de devises avec il, il vous suffit d'utiliser:

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

Vous pouvez voir plus de détails abo ut cette classe et de la bibliothèque ici: http://takahikokawasaki.github.io/nv-i18n/

0

J'utilise la réponse de Baltasarq et je trouve qu'il ralentit mon application en raison d'un certain nombre de ce java.lang.IllegalArgumentException être jeté, ce qui est sans faute de son, mais en fait la auteur de la bibliothèque de devises, qui a choisi de lancer une exception plutôt qu'une erreur (Raw Code). Cependant, en regardant dans cette bibliothèque, il y a une méthode statique publique getAvailableCurrencies qui vous donnera toutes les devises disponibles en tant qu'ensemble sans avoir à parcourir tous les paramètres régionaux disponibles et à jeter un tas d'exceptions.

Le code révisé ressemble maintenant à ceci:

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

Ce qui bien sûr, est stupide, vous pouvez tout aussi bien utiliser propre méthode statique de la monnaie et vous épargner un appel de méthode inutile. #SaveTheStack

Questions connexes