2010-03-31 2 views
14

Мне нужно вернуть строку в виде xxx-xxxx, где xxx - число, а xxxx - другое число, однако, когда у меня есть ведущие нули, они исчезают. Я пытаюсь использовать число форматер, но он не работает.Java добавляет ведущие нули в число

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)); 
    } 
+0

Хех, поэтому мой ответ не был правильным, чтобы удалить знак #? : P – Holograham

+0

Снятие # исправлено для меня. Мне нужен был один ведущий 0, поэтому я просто использовал («00»), и он сработал. – Opy

ответ

15

Когда 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 
+1

Не обижайтесь, но String.format - самый простой способ справиться с этим. –

+1

Не приняты. Строковый формат действительно более изящный, но у плаката уже было решение с использованием DecimalFormat, и он просто спрашивал, почему он не работает. –

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

+0

нет, что не работает – user69514

+0

Это не то, что он ищет. Формат не должен быть 2 4-значным числом. Формат номера телефона, ### - ####. –

+0

meh точка не была репликация его проблемы, она должна была показать, как добавить ведущие нули ... таким образом работает – Holograham

23

Там в возможно более элегантное решение:

String.format("%03d-%03d-%04d", areaCode, exchangeCode, number) 
+0

+1 намного более элегантный и лаконичный. Не думал бы о каком-либо другом решении. –

+0

Crap. 20-летний разработчик, и я этого не знал.[этот чувак чувствует себя глупо ...] Спасибо за то, что поделился. – Lawrence

+0

Вы очень желанны, Лоуренс. (-; –

2

Я бы рекомендовал использовать в 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 таким способом такая отличная вещь, особенно если вам приходится иметь дело с разными странами или такими вещами, как процент или валюта