¿Cómo eliminar los ceros a la izquierda del texto alfanumérico?

Resuelto jai asked hace 14 años • 21 respuestas

He visto preguntas sobre cómo anteponer ceros aquí en SO. ¡Pero no al revés!

¿Pueden sugerirme cómo eliminar los ceros iniciales en el texto alfanumérico? ¿Existe alguna API integrada o necesito escribir un método para recortar los ceros iniciales?

Ejemplo:

01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
jai avatar May 10 '10 13:05 jai
Aceptado

Regex es la mejor herramienta para el trabajo; lo que debería ser depende de la especificación del problema. Lo siguiente elimina los ceros iniciales, pero deja uno si es necesario (es decir, no se convertiría simplemente "0"en una cadena en blanco).

s.replaceFirst("^0+(?!$)", "")

El ^ancla se asegurará de que la 0+coincidencia esté al comienzo de la entrada. La (?!$)búsqueda anticipada negativa garantiza que no se coincidirá con toda la cadena.

Arnés de prueba:

String[] in = {
    "01234",         // "[1234]"
    "0001234a",      // "[1234a]"
    "101234",        // "[101234]"
    "000002829839",  // "[2829839]"
    "0",             // "[0]"
    "0000000",       // "[0]"
    "0000009",       // "[9]"
    "000000z",       // "[z]"
    "000000.z",      // "[.z]"
};
for (String s : in) {
    System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}

Ver también

  • expresiones-regulares.info
    • repeticiones , miradas alrededor y anclajes
  • String.replaceFirst(String regex)
polygenelubricants avatar May 10 '2010 06:05 polygenelubricants

Puedes usar la clase StringUtils de Apache Commons Lang así:

StringUtils.stripStart(yourString,"0");
Hamilton Rodrigues avatar Dec 17 '2013 19:12 Hamilton Rodrigues

Si está utilizando Kotlin, este es el único código que necesita:

yourString.trimStart('0')
Saman Sattari avatar Aug 19 '2019 14:08 Saman Sattari

¿Qué tal la forma de expresiones regulares?

String s = "001234-a";
s = s.replaceFirst ("^0*", "");

Los ^anclajes al inicio de la cadena (asumo, por el contexto, que sus cadenas no son de varias líneas aquí; de lo contrario, es posible que deba buscar \Ael inicio de la entrada en lugar del inicio de la línea). Significa 0*cero o más 0caracteres ( también puedes usarlos ). 0+Simplemente replaceFirstreemplaza todos esos 0personajes al principio sin nada.

Y si, como Vadzim, su definición de ceros a la izquierda no incluye convertir "0"(o "000"cadenas similares) en una cadena vacía (una expectativa bastante racional), simplemente vuelva a colocarla si es necesario:

String s = "00000000";
s = s.replaceFirst ("^0*", "");
if (s.isEmpty()) s = "0";
paxdiablo avatar May 10 '2010 06:05 paxdiablo