rellenar numeros numero izquierda espacios escribir ejemplo derecha concatenar con como ceros blanco agregar java formatting zero-pad

numeros - numero con ceros a la izquierda java



¿Cómo puedo rellenar un entero con ceros a la izquierda? (14)

¿Cómo dejas un int pad con ceros al convertir a una String en java?

Básicamente estoy buscando eliminar números enteros de hasta 9999 con ceros iniciales (por ejemplo, 1 = 0001 ).


Aunque muchos de los enfoques anteriores son buenos, pero a veces necesitamos formatear tanto los enteros como los flotantes. Podemos usar esto, particularmente cuando necesitamos rellenar un número particular de ceros a la izquierda así como a la derecha de los números decimales.

import java.text.NumberFormat; public class NumberFormatMain { public static void main(String[] args) { int intNumber = 25; float floatNumber = 25.546f; NumberFormat format=NumberFormat.getInstance(); format.setMaximumIntegerDigits(6); format.setMaximumFractionDigits(6); format.setMinimumFractionDigits(6); format.setMinimumIntegerDigits(6); System.out.println("Formatted Integer : "+format.format(intNumber).replace(",","")); System.out.println("Formatted Float : "+format.format(floatNumber).replace(",","")); } }


Comprueba mi código que funcione para enteros y cadenas.

Supongamos que nuestro primer número es 2. Y queremos agregar ceros para que la longitud de la cadena final sea 4. Para eso, puede usar el siguiente código

int number=2; int requiredLengthAfterPadding=4; String resultString=Integer.toString(number); int inputStringLengh=resultString.length(); int diff=requiredLengthAfterPadding-inputStringLengh; if(inputStringLengh<requiredLengthAfterPadding) { resultString=new String(new char[diff]).replace("/0", "0")+number; } System.out.println(resultString);


Digamos que quieres imprimir 11 como 011

Podría usar un formateador : "%03d" .

Puedes usar este formateador así:

int a = 11; String with3digits = String.format("%03d", a); System.out.println(with3digits);

Alternativamente, algunos métodos java soportan directamente a estos formateadores:

System.out.printf("%03d", a);


Encontré este ejemplo ... Probará ...

import java.text.DecimalFormat; class TestingAndQualityAssuranceDepartment { public static void main(String [] args) { int x=1; DecimalFormat df = new DecimalFormat("00"); System.out.println(df.format(x)); } }

Probado esto y

String.format("%05d",number);

Ambos trabajos, para mis propósitos, creo que String.Format es mejor y más conciso.


Necesitas usar un formateador, el siguiente código usa NumberFormat

int inputNo = 1; NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumIntegerDigits(4); nf.setMinimumIntegerDigits(4); nf.setGroupingUsed(false); System.out.println("Formatted Integer : " + nf.format(inputNo));

Salida: 0001


No se necesitan paquetes:

String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;

Esto ajustará la cadena a tres caracteres, y es fácil agregar una parte más por cuatro o cinco. Sé que esta no es la solución perfecta de ninguna manera (especialmente si quieres una cadena acolchada grande), pero me gusta.


Prueba este:

DecimalFormat df = new DecimalFormat("0000"); String c = df.format(9); // 0009 String a = df.format(99); // 0099 String b = df.format(999); // 0999


Puedes usar Google Guava :

Maven

<dependency> <artifactId>guava</artifactId> <groupId>com.google.guava</groupId> <version>14.0.1</version> </dependency>

Código de muestra:

String paddedString1 = Strings.padStart("7", 3, ''0''); //"007" String paddedString2 = Strings.padStart("2020", 3, ''0''); //"2020"

Nota:

Guava es una biblioteca muy útil, también proporciona muchas características relacionadas con Collections , Caches , Functional idioms , Concurrency , Strings , Primitives , Ranges , IO , Hashing , EventBus , etc.

Ref: GuavaExplained


Si el rendimiento es importante en su caso, puede hacerlo usted mismo con menos sobrecarga en comparación con la función String.format :

/** * @param in The integer value * @param fill The number of digits to fill * @return The given value left padded with the given number of digits */ public static String lPadZero(int in, int fill){ boolean negative = false; int value, len = 0; if(in >= 0){ value = in; } else { negative = true; value = - in; in = - in; len ++; } if(value == 0){ len = 1; } else{ for(; value != 0; len ++){ value /= 10; } } StringBuilder sb = new StringBuilder(); if(negative){ sb.append(''-''); } for(int i = fill; i > len; i--){ sb.append(''0''); } sb.append(in); return sb.toString(); }

Actuación

public static void main(String[] args) { Random rdm; long start; // Using own function rdm = new Random(0); start = System.nanoTime(); for(int i = 10000000; i != 0; i--){ lPadZero(rdm.nextInt(20000) - 10000, 4); } System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms"); // Using String.format rdm = new Random(0); start = System.nanoTime(); for(int i = 10000000; i != 0; i--){ String.format("%04d", rdm.nextInt(20000) - 10000); } System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms"); }

Resultado

Función propia: 1697ms.

String.format: 38134ms


Si por alguna razón usa Java pre 1.5, puede probar con el método Lang de Apache Commons

org.apache.commons.lang.StringUtils.leftPad(String str, int size, ''0'')



Usa la clase DecimalFormat, así:

NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number System.out.println("OUTPUT : "+formatter.format(811));

SALIDA: 0000811


int x = 1; System.out.format("%05d",x);

Si desea imprimir el texto formateado directamente en la pantalla.


public static String zeroPad(long number, int width) { long wrapAt = (long)Math.pow(10, width); return String.valueOf(number % wrapAt + wrapAt).substring(1); }

El único problema con este enfoque es que te hace ponerte el sombrero para pensar cómo funciona.