我有一个格式化的字符串,它等于USD 20
我想把它转换成$20
.
我怎样才能有效地做到这一点?我应该用正则表达式来做吗,但是随着语言环境的改变,国家 ISOCode 也会改变。
你需要的是这个
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 对象中更改它。其余的逻辑将是相同的。
希望这可以帮助。
我相信这应该对你有用(这假设一些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