2010-08-21 15 views
15

मैं सभी संभावित उपलब्ध मुद्राएं प्राप्त करना चाहता हूं।सभी संभावित उपलब्ध मुद्राएं प्राप्त करें

जावा 7 ने ऐसी सुविधा प्रदान की थी।

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

हालांकि, मैं अभी भी विकास और तैनाती के लिए जावा 6 का उपयोग कर रहा हूं। क्या मुझे पता चलेगा कि मैं सभी संभावित मुद्राओं को कैसे प्राप्त कर सकता हूं? कोड उदाहरण का सबसे स्वागत है।

उत्तर

21

द्वारा परिभाषित आईएसओ मेज और मुद्रा वर्ग प्रलेखन अध्ययन करने के बाद, यह है कि आप कोड के रूप में या लोकेल के रूप में मुद्रा के लिए पूछ सकते हैं लगता है, और कक्षा लोकेल में 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; 
    } 

आशा इस मदद करता है।

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

मैं एंड्रॉयड पर परीक्षण किया है:

+0

उत्तर के लिए धन्यवाद, मेरे पास एक प्रश्न है। मैंने यह कोड लिखा है, सबकुछ ठीक काम करता है लेकिन मुझे अफगानिस्तान से मुद्रा एएफएन नहीं मिल रहा है, समस्या केवल मेरे साथ है? क्या आपके पास मेरी कोई सलाह है? धन्यवाद –

+0

अब मैं जोडा-मनी लाइब्रेरी का उपयोग कर रहा हूं, जिसने समस्या को ठीक किया। धन्यवाद –

+1

मैं परीक्षण की अनुशंसा करता हूं कि 'set.getInstance (लोकेल लोकेल)' आपके सेट में परिणाम जोड़ने से पहले 'शून्य' वापस नहीं लौटाता है। [Javadocs] से (https://docs.oracle.com/javase/7/docs/api/java/util/Currency.html#getInstance (java.util.Locale)): "विधि उन क्षेत्रों के लिए शून्य लौटती है जो विधि एक मुद्रा नहीं है, जैसे अंटार्कटिका। " – snark

9

अपनी आवश्यकताओं के साथ ISO 4217 (xml) परिभाषा और openJDK7 से नमूना कम्बाइन अगर आप सभी मुद्राओं चाहते हैं। आप डिफ़ॉल्ट स्थलों से अधिक पुनरावृति यदि आप केवल प्राप्त 180 का 78 आईएसओ 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

अन्यथा एक संस्करण Baltasarq कोड का एक छोटा बेहतर दोहराव से बचने के।

+0

बाल्टसारक का उत्तर एक सेट का उपयोग करके नकल से बचाता है, जो पहले से मौजूद होने पर प्रविष्टियों को ओवरराइट करता है। साथ ही, वह 'हैशसेट' का उपयोग करता है, जो सरणी सूची में 'शामिल (...)' चलाने से आमतौर पर तेज़ है। – Sergio

0

JodaMoney का उपयोग करें। Joda-money.jar के अंदर मुझे MoneyData.csv मिलती है इसमें सभी आईएसओ 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()); 
    } 

`

0

मैं मुद्रा जावा वर्ग का उपयोग कर रहा है, लेकिन मैं अफगानिस्तान (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 वहाँ तो मैं था अब इस पुस्तकालय का उपयोग कर रहा हूँ।

मुझे उम्मीद है कि इससे मदद मिल सकती है।

5

यह जो एक जावा गणन

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

तुम भी पुस्तकालय 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/

0

मैं Baltasarq के जवाब का उपयोग कर रहे हैं और मैं इसे java.lang.IllegalArgumentException के के एक नंबर को उठाकर फेंका है, जो अपने की कोई गलती नहीं है की वजह से मेरे ऐप को धीमा कर देती लगता है, लेकिन वास्तव में: इस वर्ग और यहाँ पुस्तकालय ut मुद्रा पुस्तकालय के लेखक, जिन्होंने एक त्रुटि के विपरीत अपवाद फेंकने के लिए चुना है (Raw Code)।

हालांकि उस लाइब्रेरी को देखते हुए, एक सार्वजनिक स्थैतिक विधि getAvailableCurrencies है जो आपको सभी उपलब्ध मुद्राओं को सभी उपलब्ध लोकेशंस के माध्यम से लूप किए बिना सेट के रूप में प्रदान करेगी और अपवादों का एक समूह फेंक देगी।

संशोधित कोड अब इस तरह दिखता है:

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

कौन सा ज़ाहिर है, मूर्ख है, तो आप बस के रूप में अच्छी तरह से मुद्रा की अपनी स्थिर विधि का उपयोग करें और अपने आप को एक अनावश्यक विधि कॉल बचा सकता है। #SaveTheStack

संबंधित मुद्दे