¿Cómo eliminar los ceros a la izquierda del texto alfanumérico?
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
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)
Puedes usar la clase StringUtils de Apache Commons Lang así:
StringUtils.stripStart(yourString,"0");
Si está utilizando Kotlin, este es el único código que necesita:
yourString.trimStart('0')
¿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 \A
el inicio de la entrada en lugar del inicio de la línea). Significa 0*
cero o más 0
caracteres ( también puedes usarlos ). 0+
Simplemente replaceFirst
reemplaza todos esos 0
personajes 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";