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));
}
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
間違いなくもっとエレガントな解決策があります:
String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)
#記号を削除します
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
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は、特にさまざまな国やパーセンテージや通貨などを扱う必要がある場合に、非常に優れています。