【问题标题】:getting currency code if we have only country code in database如果我们在数据库中只有国家代码,则获取货币代码
【发布时间】:2013-05-25 19:42:28
【问题描述】:

我在获取国家/地区货币时遇到问题,我通过这些代码在数据库中获取国家/地区代码我必须在 java 中获取国家/地区代码我如何为此制作代码请建议我。 我正在尝试这个例子,但它不起作用。

    class Utils {
    public static SortedMap<Currency, Locale> currencyLocaleMap;
    static {
        currencyLocaleMap = new TreeMap<Currency, Locale>(
                new Comparator<Currency>() {
                    public int compare(Currency c1, Currency c2) {
                        return c1.getCurrencyCode().compareTo(
                                c2.getCurrencyCode());
                    }
                });
        for (Locale locale : Locale.getAvailableLocales()) {
            try {
                Currency currency = Currency.getInstance(locale);
                currencyLocaleMap.put(currency, locale);
            } catch (Exception e) {
            }
        }
    }

    public static String getCurrencySymbol(String currencyCode) {
        Currency currency = Currency.getInstance(currencyCode);
        System.out.println(currencyCode + ":-"
                + currency.getSymbol(currencyLocaleMap.get(currency)));
        return currency.getSymbol(currencyLocaleMap.get(currency));
    }
}

  public class GetCurrency {
    public static void main(String[] args) {

        Utils.getCurrencySymbol(Currency.getInstance("INR").getCurrencyCode());
        Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN)
                .getCurrencyCode());
        Utils.getCurrencySymbol(Currency.getInstance(Locale.UK)
                .getCurrencyCode());

        Utils.getCurrencySymbol("INR");
    }
}

【问题讨论】:

  • “它不工作” - 你能进一步解释一下吗?哪些部分不起作用,您发现了什么问题?
  • @Rup 如果我将“INR”更改为另一个符号为 $ 的“BMD”,那么它会抛出空指针异常
  • 你调试了吗?什么是空?如果您有特定问题,请更新您的问题。否则它将被关闭。
  • @Jamie 是的,我已经对其进行了调试,那些货币代码已经存在于语言环境中正确显示了它们的符号,但那些在语言环境中不存在抛出空指针异常我已经从谷歌下载了一些货币代码其中一些像美元,澳元在起作用,但对于 BMD,BZD 不起作用如何使这些起作用

标签: java android currency


【解决方案1】:

试试:

//to retrieve currency code
public static String getCurrencyCode(String countryCode) {
    return Currency.getInstance(new Locale("", countryCode)).getCurrencyCode(); 
}

//to retrieve currency symbol 
public static String getCurrencySymbol(String countryCode) {
    return Currency.getInstance(new Locale("", countryCode)).getSymbol(); 
}

【讨论】:

  • new Locale(null, countryCode) 会抛出异常,null 不能作为参数传递
  • 和空字符串?
  • @Puce 此代码将 NPE 作为返回的语言环境,当我们传递一个语言为“_IND”的空字符串时,它表示 Currency 类不支持。
【解决方案2】:
public static String getSymbol(String countryCode) {
    Locale[] availableLocales = Locale.getAvailableLocales();
    for (int i = 0; i < availableLocales.length; i++) {
        if (availableLocales[i].getCountry().equalsIgnoreCase(countryCode))
            return Currency.getInstance(availableLocales[i]).getCurrencyCode();
    }
    return "";
}

【讨论】:

    【解决方案3】:

    满足此要求的简单选项:

    public static String getCurrencySymbol(String countryCode) {
        String currencySymbol = "";
        Locale locale = null;
        Currency currency = null;
        try {
            locale = new Locale("", countryCode);
            currency = Currency.getInstance(locale);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    
        if (currency != null) {
            currencySymbol = currency.getCurrencyCode();
        }
    
        return currencySymbol;
    }
    

    【讨论】:

      【解决方案4】:
      import java.util.Currency;
      import java.util.List;
      import java.util.Locale;
      
      import org.apache.commons.lang.LocaleUtils;
      
      public class Test {
      
      
          public static String getCurrenyCodeByCountryCode(String countryCode) {
      
              String currencyCode="USD";
      
              try {
                  List<Locale> locales=LocaleUtils.languagesByCountry(countryCode);
      
                  Currency currency=Currency.getInstance(locales.get(0));
      
                  currencyCode=currency.getCurrencyCode();
      
      
              } catch (Exception e) {
      
              }
              return currencyCode;
      
          }
      
      
          public static void main(String[] args) throws Exception {
      
      
              System.out.println(getCurrenyCodeByCountryCode("IN"));
      
          }
      
      }
      

      【讨论】:

        【解决方案5】:

        我找到了解决问题的方法,这就是我所做的代码。

                public static Map<Currency, Locale> getCurrencyLocaleMap() {
                Map<Currency, Locale> currencyLocaleMap = new HashMap<Currency, Locale>();
                for (Locale locale : Locale.getAvailableLocales()) {
                    try {
                        Currency currency = Currency.getInstance(locale);
                        currencyLocaleMap.put(currency, locale);
                    } catch (Exception e) {
                    }
                }
                return currencyLocaleMap;
            }
        
            public static String getCurrencySymbol(String currencyCode) {
                String currencySymbol = null;
                if (currencyCode == null || currencyCode.isEmpty()) {
                    currencySymbol = currencyCode;
                } else {
                    Locale currencyLocale = null;
                    Map<Currency, Locale> currencyLocaleMap = null;
                    Currency currency = null;
                    try {
                        currency = Currency.getInstance(currencyCode);
                        currencyLocaleMap = getCurrencyLocaleMap();
                        currencyLocale = currencyLocaleMap.get(currency);
                    } catch (Exception e) {
                        System.out.println("No symbol is there for currencyCode="
                                + currencyCode);
                    }
                    if (currency != null && currencyLocale != null) {
                        currencySymbol = currency.getSymbol(currencyLocaleMap
                                .get(currency));
                    } else {
                        currencySymbol = currencyCode;
                    }
                }
                return currencySymbol;
            }
        }
        

        【讨论】:

          【解决方案6】:

          调试以确定哪些货币可用。

              Set<Currency> avail = Currency.getAvailableCurrencies();
              for (Currency next : avail) {
                  System.out.println("----------------------------------------");
                  System.out.println("displayName="+next.getDisplayName());
                  System.out.println("currencyCode="+next.getCurrencyCode());
                  System.out.println("numericCode="+next.getNumericCode());
                  System.out.println("symbol="+next.getSymbol());
                  System.out.println("toString="+next.toString());
                  System.out.println("----------------------------------------");
              }
          

          如果任何需要的货币丢失/错误,请按照 javadoc 中的说明进行操作:

          用户可以通过创建一个名为&lt;JAVA_HOME&gt;/lib/currency.properties 的属性文件来取代Java 运行时货币数据。属性文件的内容分别是 ISO 3166 国家代码和 ISO 4217 货币数据的键/值对。值部分由货币的三个 ISO 4217 值组成,即字母代码、数字代码和次要单位。这三个 ISO 4217 值用逗号分隔。以'#' 开头的行被视为注释行。例如,

          #Sample currency properties
          JP=JPZ,999,0
          

          将取代日本的货币数据。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-07
            • 2023-04-04
            • 1970-01-01
            • 2017-04-09
            • 1970-01-01
            • 2011-08-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多