2

我有一个格式化的字符串,它等于USD 20

我想把它转换成$20.

我怎样才能有效地做到这一点?我应该用正则表达式来做吗,但是随着语言环境的改变,国家 ISOCode 也会改变。

4

2 回答 2

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

然后将金额连接到符号。

在这种情况下,如果 Locale 更改,您只需在 locale 对象中更改它。其余的逻辑将是相同的。

希望这可以帮助。

于 2013-08-07T13:09:29.240 回答
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 实例。语言环境的语言和变体组件被忽略。随着各国货币的变化,结果可能会随时间而变化。例如,对于欧洲货币联盟的原始成员国,该方法返回截至2001年12月31日的旧国家货币,以及从各自国家当地时间2002年1月1日开始的欧元。

参数: locale - 需要 Currency 实例的国家/地区的语言环境

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

于 2013-08-07T13:21:59.043 回答