17

xxx-xxxxの形式で文字列を返す必要があります。ここで、xxxは数値で、xxxxは別の数値ですが、先行ゼロがあると消えます。数値フォーマッタを試していますが、機能しません。

 public String toString(){
        NumberFormat nf3 = new DecimalFormat("#000");
        NumberFormat nf4 = new DecimalFormat("#0000");
        if( areaCode != 0)
            return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
        else
            return exchangeCode + "-" + number;
    }

}

私はそれを考え出した:

 public String toString(){
        NumberFormat nf3 = new DecimalFormat("000");
        NumberFormat nf4 = new DecimalFormat("0000");
        if( areaCode != 0)
            //myFormat.format(new Integer(someValue));
            return nf3.format(new Integer(areaCode)) + "-" + nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
        else
            return nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
    }
4

5 に答える 5

26

間違いなくもっとエレガントな解決策があります:

String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)
于 2010-03-31T20:28:16.093 に答える
18

areaCodeが0の場合、呼び出すのを忘れますformat!それ以外は問題ないようです。先頭の「#」は必須ではありませんが、有効な入力に対して問題は発生しません。

私はそれをチェックするために本当に素早く試してみました、そしてそれは私にとってうまくいきました。

public static String formatTest(int areaCode, int exchangeCode, int number) {
    DecimalFormat nf3 = new DecimalFormat("#000");
    DecimalFormat nf4 = new DecimalFormat("#0000");
    if( areaCode != 0)
        return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
    else
        return nf3.format(exchangeCode) + "-" + nf4.format(number);
}


public static void main(String[] args) {
    System.out.println(formatTest(12, 90, 8));
    System.out.println(formatTest(1, 953, 1932));
}

出力:

012-090-0008
001-953-1932
于 2010-03-31T19:43:10.343 に答える
6

#記号を削除します

http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html

このコード:

import java.text.DecimalFormat;
import java.text.NumberFormat;


public class Test
{

    public static void main(String[] args) 
    {       
        int areaCode = 123;
        int exchangeCode = 456;

        NumberFormat nf3 = new DecimalFormat("0000");

        System.out.println(nf3.format(areaCode) + "-" + nf3.format(exchangeCode) );
    }

}

この出力を生成します:

0123-0456

于 2010-03-31T19:37:00.533 に答える
4

NumberFormatの使用をお勧めします(http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

私の意見では、それは最高の読みやすさを提供します。また、DecimalFormatに間違った文字列を入力した場合のエラーの可能性を最小限に抑えます。

  final int value1 = 1; 
  final double value2 = 4.2;

  NumberFormat nf = NumberFormat.getInstance(Locale.US);
  nf.setMinimumIntegerDigits(2);

  System.out.println(nf.format(value1));
  System.out.println(nf.format(value2));

出力:

  01
  04.2

(ロケールはオプションですが、国際チームで作業する場合に推奨します。デフォルト値はローカル設定です)

とにかく、この方法でのNumberFormatは、特にさまざまな国やパーセンテージや通貨などを扱う必要がある場合に、非常に優れています。

于 2013-09-27T13:23:44.303 に答える
0

NumberFormatクラスを使用して、最小ゼロを0に簡単に設定できます。これは、たとえば通貨フォーマットの魅力のように機能します。

   formatter = NumberFormat.getCurrencyInstance();
   formatter.setMinimumFractionDigits(0);
   -----------
   print ( formatter.format(119.00) ) ---> $119
于 2020-05-25T18:10:50.960 に答える