2010-03-31 26 views
14

Necesito devolver una cadena en la forma xxx-xxxx donde xxx es un número y xxxx es otro número, sin embargo, cuando tengo ceros a la izquierda, desaparecen. Estoy intentando el formateador de números, pero no está funcionando.Java agregue ceros a un número

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

}

lo he descubierto:

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, por lo que mi respuesta no era correcta para eliminar el signo #? : P – Holograham

+0

Al eliminar el # se corrigió por mí. Necesitaba un 0 como líder, así que lo usé ("00") y funcionó. – Opy

Respuesta

15

Cuando AreaCode es 0, se olvida de llamar format! Aparte de eso, se ve bien. Los "#" iniciales no son necesarios, pero no causarán ningún problema para las entradas válidas.

Lo probé muy rápido para comprobar y funcionó bien para mí.

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

Salida:

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

Sin ofender, String.format es la forma más fácil de lidiar con esto. –

+1

Ninguno tomado. El formato de cadena es de hecho más elegante, pero el póster ya tenía una solución con DecimalFormat y solo preguntaba por qué no funcionaba. –

6

Retire el signo #

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

este código:

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 esta salida:

0123-0456

+0

no eso no funcionó – user69514

+0

Eso no es lo que está buscando. El formato no se supone que sea 2 números de 4 dígitos. Es el formato del número de teléfono, ### - ####. –

+0

meh el punto no era para replicar su problema, era mostrar cómo agregar ceros a la izquierda ... de esta manera funciona – Holograham

23

Hay una solución sin duda más elegante:

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

+1 mucho más elegante y conciso. No pensaría en ninguna otra solución. –

+0

mierda. Desarrollador de 20 años y no lo sabía.[este tipo se siente tan estúpido ...] Gracias por compartir. – Lawrence

+0

De nada, Lawrence. (-; –

2

Yo recomiendo usar el NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

En mi opinión, da la mejor legibilidad. Y también minimiza la posibilidad de errores cuando coloca un String incorrecto en 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)); 

Salida:

01 
    04.2 

(. El escenario es opcional, pero se lo recomiendo cuando se trabaja con un valor por defecto del equipo internacional son los ajustes locales)

De todos modos NumberFormat de esta manera es una gran cosa, especialmente si tiene que tratar con diferentes países o cosas como el porcentaje o la moneda

Cuestiones relacionadas