私はフォーマットされた文字列を持っています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);
次に、Amount をシンボルに連結します。
この場合、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