2012-04-19 4 views
2

質問を投稿する前に件名を多少調査しましたが、回答が見つかりませんでした。ここでDecimalFormat変数のグループサイズ

は私がやろうとしているものです:

入力:長い数7-8小数スペース(ノー画分)。

出力: "X XXXXXX X"(Xは数字)が存在する必要があります。

DecimalFormatSymbols group = new DecimalFormatSymbols(); 
group.setGroupingSeparator(' '); 
DecimalFormat idFormat = new DecimalFormat("0,000000,0", group); 

しかし、これは代わりに "0 1 2 3 4 5 6 7" のようなものを出力します:Sは、私が間違って何をやっている

例:私が試した何1234567 => 0 123456 7

EDIT:

DecimalFormatSymbols group = new DecimalFormatSymbols(); group.setGroupingSeparator(' '); group.setDecimalSeparator(' '); DecimalFormat idFormat = new DecimalFormat("0,000000.0", group); 

とマニュアルを再読み込みから

が、私はDecimalFormatは、印刷への道を持っていないことに気づい:

私はこれを行う場合、私は必要なものを印刷することができます可変長グループ(私は幸運にも私は2だけ必要です - 私は小数部分を使うことができます)。しかし、これを「適切に」どうしたらいいですか?ここで正規表現を使用する/自分の関数を書くことは問題ないのですか、それともこれを行うライブラリがありますか?

EDIT2:

ちょうどキックのために、以下のことを行うための正規表現ベースの方法:)

Random random = new Random(); 
System.out.println(
     String.valueOf(Math.round(random.nextDouble() * 1e8)) 
     .replaceAll("(.*)(\\d{6})(\\d)$", "$1 $2 $3") 
     .replaceAll("^ ", "0 ")); 
+0

ここでは正規表現があなたを助けるとは思わない - それらは解析用です。 AFAIK正規表現を使って10進数をフォーマットする方法はありません。 – Alex

答えて

1

私はあなたがこのためにDecimalFormatグループ化区切りを使用することができるとは思わないです。 Javadocから:

複数のグループ化文字を含むパターンを指定する場合、最後の文字と最後の文字の間の間隔が使用されます。 "#、##、###、####" == "######、####" == "##、####、####"です。

+0

私は共通のアプローチを知らない。私はおそらくちょうど自分自身を書くだろう、比較的簡単でなければならない。 – Alex

0

この同じ目的で、ICU4Jライブラリのcom.ibm.icu.text.DecimalFormatクラスを使用できます。可変長グループサイズをサポートしています。あなたの特別な場合:

com.ibm.icu.text.DecimalFormatSymbols dfs = new com.ibm.icu.text.DecimalFormatSymbols(); 
dfs.setGroupingSeparator(' '); 
com.ibm.icu.text.DecimalFormat df = new com.ibm.icu.text.DecimalFormat("0,000000,0", dfs); 

「1234567」のような数字の場合は、「0 123456 7」と表示されます。

関連する問題