2

質問を投稿する前に少し調べてみましたが、答えが見つかりませんでした。

これが私がやろうとしていることです:

入力:7〜8桁の小数点以下の桁数(分数なし)。

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

例:1234567 => 0 123456 7

私が試したこと:

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

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

編集:

これを行うと、必要なものを印刷できます。

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

2 に答える 2

1

DecimalFormatこれにはグループ化区切り文字を使用できないと思います。Javadocから:

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

于 2012-04-19T14:12:40.063 に答える
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」のような数値に対して「01234567」が出力されます。

于 2013-03-20T10:51:19.107 に答える