Java 使用「;R";而不是",;“南非兰特”;南非货币

Java 使用「;R";而不是",;“南非兰特”;南非货币,java,android,currency-formatting,Java,Android,Currency Formatting,当地区设置为南非时,如何使用“R”表示货币 现在它显示“ZAR”,我需要它显示“R” 我试过: final Currency curr = Currency.getInstance("ZAR"); final NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault()); nf.setCurrency(curr); final String value = nf.format(12345.67); 完成所有这些之

当地区设置为南非时,如何使用“R”表示货币

现在它显示“ZAR”,我需要它显示“R”

我试过:

final Currency curr = Currency.getInstance("ZAR");
final NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault());
nf.setCurrency(curr);
final String value = nf.format(12345.67);

完成所有这些之后,我使用.replace()将ZAR替换为R

构建您自己的
NumberFormat
类(扩展Java的),并实现您自己的
格式版本
;为除
ZAR
以外的所有货币调用基类函数


您当前采用的方法将导致大量重复(和未封装)的代码。

构建您自己的
NumberFormat
类(扩展Java的),并实现您自己的
格式版本;为除
ZAR
以外的所有货币调用基类函数


您当前采用的方法往往会导致大量重复(未封装)的代码。

好的,我发现了一个很好的例子:

      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));
  }
公共静态分类地图currencyLocaleMap;
静止的{
currencyLocaleMap=新树映射(新比较器(){
公共整数比较(货币c1、货币c2){
返回c1.getCurrencyCode().compareTo(c2.getCurrencyCode());
}
});
for(Locale:Locale.getAvailableLocales()){
试一试{
Currency=Currency.getInstance(区域设置);
currencyLocaleMap.put(货币、区域设置);
}捕获(例外e){
}
}
}
公共静态字符串getCurrencySymbol(字符串currencyCode){
Currency Currency=Currency.getInstance(currencyCode);
System.out.println(currencyCode+“:-”+currency.getSymbol(currencyLocaleMap.get(currency));
返回currency.getSymbol(currencyLocaleMap.get(currency));
}

从这里:

好的,我找到了一个很好的例子:

      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));
  }
公共静态分类地图currencyLocaleMap;
静止的{
currencyLocaleMap=新树映射(新比较器(){
公共整数比较(货币c1、货币c2){
返回c1.getCurrencyCode().compareTo(c2.getCurrencyCode());
}
});
for(Locale:Locale.getAvailableLocales()){
试一试{
Currency=Currency.getInstance(区域设置);
currencyLocaleMap.put(货币、区域设置);
}捕获(例外e){
}
}
}
公共静态字符串getCurrencySymbol(字符串currencyCode){
Currency Currency=Currency.getInstance(currencyCode);
System.out.println(currencyCode+“:-”+currency.getSymbol(currencyLocaleMap.get(currency));
返回currency.getSymbol(currencyLocaleMap.get(currency));
}

从这里开始:

类根据作为参数传递的区域设置对数字进行格式化。如果区域设置为南非(
新区域设置(“en”、“ZA”)
),则数字将正确显示:R 12345.67

final Currency curr = Currency.getInstance("ZAR");
final NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("en", "ZA"));
nf.setCurrency(curr);
final String value = nf.format(12345.67);
System.out.println(value);

NumberFormat
类根据作为参数传递的区域设置格式化数字。如果区域设置为南非(
新区域设置(“en”、“ZA”)
),则数字将正确显示:R 12345.67

final Currency curr = Currency.getInstance("ZAR");
final NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("en", "ZA"));
nf.setCurrency(curr);
final String value = nf.format(12345.67);
System.out.println(value);

谢谢,有没有图书馆可以做到这一点呢?这是一个相当具体的(而且,我敢说,是特殊的)要求,所以我对此表示怀疑。我的方法只有十几行左右的代码。谢谢,有没有库已经可以做到这一点?这是一个相当具体的(而且,我敢说,是特殊的)要求,所以我对此表示怀疑。我的方法只有十几行代码。