- ベストアンサー
9桁の金額形式変換に適したクラスやメソッドはありますか?
- 9桁の金額表記をZZZ,ZZZ,ZZ9形式に変換するクラスやメソッドはありますか?
- 例えば、000000000を**********0といった形式に変換する方法を教えてください。
- CASE分を使って実装するか、別の方法があるのか、アドバイスをお待ちしています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「Z」はゼロサプレス(ゼロだったら空白を出力)というのが一般的な気がしますが、上位のゼロの桁は「*」を出力するのでしょうか? ■ 元の値が int でゼロサプレスの場合 DecimalFormat を使って素直に書式を書けば良いかと。 http://java.sun.com/javase/ja/6/docs/ja/api/java/text/DecimalFormat.html NumberFormat nf = new DecimalFormat("###,###,##0"); System.out.println(nf.format(value)); ■ 元の値が String でカンマを付加した上で上位のゼロを「*」に置き換える場合 String#replaceAll(String, String) を使って置換する方法が考えられます。 http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29 String commasValue = value.replaceAll("(\\d)(?=(?:\\d{3})+$)", "$1,"); System.out.println(commasValue.replaceAll("(?<=^[0,]*)[0,](?=[\\d,])", "*")); (一度 int に変換して↓の方法を使った方が簡単かも知れません) ■ 元の値が int で出力桁数が9桁に決まっており、上位のゼロを「*」に置き換える場合 DecimalFormat を使ってカンマ区切り表記にした後、足りない上位桁に「*」を付ければ良いかと。 NumberFormat nf = new DecimalFormat("###,###,##0"); String formatted = nf.format(value); System.out.println("***********".substring(formatted.length()) + formatted);
お礼
すいません。 ZZZ,ZZZ,ZZ9形式ではなく***,***,**9形式の誤りでした。 それと例の中の記述で 001234567 → ***1234,567と記載してたヶ所は 正しくはこうなります。 001234567 → **1,234,567 DecimalFormatがあるのは知ってたのですが >DecimalFormat を使ってカンマ区切り表記にした後、 >足りない上位桁に「*」を付ければ良いかと。 こういった考えまではまだありませんでした。 早速アドバイス通り 9桁文字列型を int value = Integer.valueOf(金額).intValue(); に戻して対応出来ました。 1つ1つのパターンからreplaceしようと 考えてたので手間が省けました。 本当にどうもありがとうございました。