将三个字母的货币名称转换为符号名称(从20美元到20美元不等)

时间:2013-08-07 13:00:51

标签: java currency

我的格式化字符串等于USD 20

我想将其转换为$20

我怎样才能有效率?我应该使用正则表达式,但由于区域设置的更改,国家ISOCode也将更改。

2 个答案:

答案 0 :(得分:3)

你需要的是这个

      import java.util.Currency; 
      import java.util.Locale;

      // create a currency for US locale
      Locale locale = Locale.US;
      Currency curr = Currency.getInstance(locale);

      // get and print the symbol of the currency
      StringBuilder symbol =  new StringBuilder(curr.getSymbol(locale));
      System.out.println("Currency symbol is = " + symbol);

然后将Amount连接到符号。

  

在这种情况下,如果区域设置发生更改,则只需更改   在语言环境对象中。其余逻辑将是相同的。

希望这有帮助。

答案 1 :(得分:0)

我相信这应该适合你(假设已经声明并初始化了一些String s):

Currency localCurrForJVM = Currency.getInstance(Locale.getDefault());
String localCurrencySymbol = localCurrForJVM.getSymbol();

s = s.replaceAll("[^0-9.]", ""); 
//using regex to replace all non-numeric, non-decimal characters with ""

s = new StringBuilder(s).insert(0, localCurrencySymbol).toString(); 
//prepends the symbol to the StringBuilder, which replaces s

一些参考文献:

public static Locale getDefault()
  

获取此实例的默认语言环境的当前值   Java虚拟机。

     

Java虚拟机在启动期间设置默认语言环境   在主机环境中。它被许多区域敏感方法使用   如果没有明确指定语言环境。它可以使用更改   setDefault方法。

和:

public static Currency getInstance(Locale locale) 
  

返回给定语言环境的国家/地区的Currency实例。   语言环境的语言和变体组件将被忽略。该   随着各国货币变化,结果可能随时间而变化。对于   例如,欧洲货币的原始成员国   联盟,该方法返回旧的国家货币直到12月   2001年1月31日,欧洲从2002年1月1日起,当地时间   各国。

     

参数:           locale - 需要Currency实例的国家/地区的区域设置

     

返回:           给定语言环境的国家/地区的Currency实例,或者为null