2010-03-31 18 views
14

Devo restituire una stringa nel formato xxx-xxxx dove xxx è un numero e xxxx è un altro numero, tuttavia quando ho zero iniziali scompaiono. Sto provando il formattatore di numeri, ma non funziona.Java aggiunge gli zeri iniziali a un numero

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

}

ho capito:

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, quindi la mia risposta non è stata corretta per rimuovere il simbolo #? : P – Holograham

+0

Rimuovere # lo ha corretto per me. Avevo bisogno di uno zero iniziale, quindi ho appena usato ("00") e ha funzionato. – Opy

risposta

15

Quando AreaCode è 0, si dimentica di chiamare format! A parte questo, sembra a posto. Il "#" iniziale non è necessario, ma non causerà alcun problema per gli input validi.

L'ho appena provato molto rapidamente per controllare e ha funzionato bene per me.

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

uscita:

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

Senza offesa ma, String.format è il modo più semplice per affrontare questo. –

+1

Nessuno preso. Il formato stringa è davvero più elegante, ma il poster aveva già una soluzione con DecimalFormat e chiedeva solo perché non funzionava. –

6

Rimuovere il segno #

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

Questo codice:

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

} 

produce questo risultato:

0123-0456

+0

no che non ha funzionato – user69514

+0

Questo non è quello che sta cercando. Il formato non dovrebbe essere 2 numeri a 4 cifre. È il formato del numero di telefono, ### - ####. –

+0

meh il punto non era quello di replicare il suo problema era di mostrare come aggiungere zeri iniziali ... in questo modo funziona – Holograham

23

C'è una soluzione senza dubbio più elegante:

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

+1 molto più elegante e conciso. Non penserei ad alcuna altra soluzione. –

+0

Merda. Sviluppatore di 20 anni e non lo sapevo.[questo tizio si sente così stupido ...] Grazie per averlo condiviso. – Lawrence

+0

Sei il benvenuto, Lawrence. (-; –

2

mi consiglia di utilizzare il NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

A mio parere, dà il meglio leggibilità. E minimizza anche la possibilità di errori quando si inserisce una stringa errata in 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)); 

uscita:

01 
    04.2 

(. Il Locale è opzionale ma lo consiglio quando si lavora con un team di valore internazionale di default sono le impostazioni locali)

Comunque NumberFormat in questo modo è una cosa così grandiosa, soprattutto se hai a che fare con paesi diversi o cose come la percentuale o la valuta

Problemi correlati