2010-03-31 1 views
14

Ich muss eine Zeichenfolge in der Form xxx-xxxx zurückgeben, wobei xxx eine Zahl ist und xxxx eine andere Zahl ist, aber wenn ich führende Nullen habe, verschwinden sie. Ich versuche Zahlenformatierer, aber es funktioniert nicht.Java führende Nullen zu einer Nummer hinzufügen

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; 
    } 

}

ich es herausgefunden:

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

heh, so war meine Antwort nicht korrekt, um die # Zeichen zu entfernen? : P – Holograham

+0

Entfernen der # behoben es für mich. Ich brauchte eine führende 0, also benutzte ich einfach ("00") und es funktionierte. – Opy

Antwort

15

Wenn areacode 0, Sie vergessen format zu nennen! Ansonsten sieht es gut aus. Die führenden "#" sind nicht notwendig, verursachen aber keine Probleme für gültige Eingaben.

Ich habe es einfach ausprobiert, schnell zu überprüfen und es hat gut für mich gearbeitet.

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

Ausgang:

012-090-0008 
001-953-1932 
+1

Nichts für ungut, aber String.format ist der einfachste Weg, um damit umzugehen. –

+1

Keine genommen. String-Format ist in der Tat eleganter, aber das Poster hatte bereits eine Lösung mit DecimalFormat und fragte nur, warum es nicht funktionierte. –

6

Entfernen Sie das # -Zeichen

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

Dieser Code:

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

} 

erzeugt diese Ausgabe:

0123-0456

+0

nein das hat nicht funktioniert – user69514

+0

Das ist nicht was er sucht. Das Format sollte nicht 2 4-stellige Zahlen sein. Es ist Telefonnummer Format, ### - ####. –

+0

meh der Punkt war nicht zu replizieren sein Problem war es zu zeigen, wie führende Nullen hinzufügen ... so funktioniert – Holograham

23

Es gibt eine wohl elegantere Lösung:

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

+1 viel eleganter und prägnanter. Ich würde nicht an eine andere Lösung denken. –

+0

Mist. 20 Jahre Entwickler und das wusste ich nicht.[dieser Kerl fühlt sich sooo dumm ...] Danke fürs Teilen. – Lawrence

+0

Sie sind herzlich willkommen, Lawrence. (-; –

2

Ich würde empfehlen, die Number (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

Meiner Meinung nach Verwendung gibt es die beste Lesbarkeit. Und minimiert auch die Möglichkeit von Fehlern, wenn Sie einen falschen String in das DecimalFormat einfügen.

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

Ausgang:

01 
    04.2 

(. Die Locale ist optional, aber ich es empfehlen, wenn Sie mit einem internationalen Team arbeiten Standardwert sind die lokalen Einstellungen)

Wie auch immer auf diese Weise Number ist so eine großartige Sache, vor allem, wenn Sie mit verschiedenen Ländern oder Dinge wie Prozent oder Währung beschäftigen müssen