He visto preguntas sobre cómo prefijar ceros aquí en SO. ¡Pero no al revés!
¿Pueden sugerirme cómo eliminar los ceros a la izquierda en el texto alfanumérico? ¿Hay alguna API incorporada 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
java
string
alphanumeric
jai
fuente
fuente
.replaceFirst("^0+(?!$)".toRegex(), "")
Puede usar la clase StringUtils de Apache Commons Lang de esta manera:
fuente
¿Qué tal la forma regex:
Los
^
anclajes al inicio de la cadena (supongo por contexto que sus cadenas no son de varias líneas aquí, de lo contrario, es posible que deba buscar el\A
inicio de la entrada en lugar del inicio de la línea). Los0*
medios cero o más0
caracteres (se podrían utilizar0+
también). ElreplaceFirst
justo reemplaza todos esos0
personajes al principio con nada.Y si, como Vadzim, su definición de ceros iniciales no incluye convertir
"0"
(o"000"
cadenas similares) en una cadena vacía (una expectativa lo suficientemente racional), simplemente vuelva a colocarla si es necesario:fuente
Una forma clara sin necesidad de regExp y ninguna biblioteca externa.
fuente
Para ir con la respuesta de Apache Commons de thelost: usando guava-bibliotecas (la biblioteca de utilidad Java de propósito general de Google, que diría que ahora debería estar en el classpath de cualquier proyecto Java no trivial), esto usaría CharMatcher :
fuente
Si está utilizando Kotlin, este es el único código que necesita:
fuente
Podrías simplemente hacer:
String s = Integer.valueOf("0001007").toString();
fuente
Use la
StringUtils
clase Apache Commons :fuente
Utilizar este:
fuente
Usando Regexp con grupos:
fuente
Usar expresiones regulares como sugieren algunas de las respuestas es una buena manera de hacerlo. Si no desea usar expresiones regulares, puede usar este código:
fuente
String
... use el enfoque magiccrafter en su lugar.Creo que es muy fácil hacer eso. Simplemente puede recorrer la cadena desde el principio y eliminar los ceros hasta que encuentre un carácter no cero.
fuente
Si (como yo) necesita eliminar todos los ceros a la izquierda de cada "palabra" en una cadena, puede modificar la respuesta de @polygenelubricants a lo siguiente:
lo que resulta en:
fuente
Sin usar
Regex
osubstring()
función en laString
que será ineficiente -fuente
Se podría sustituir
"^0*(.*)"
a"$1"
la expresión regularfuente
fuente
Si no quieres usar regex o una biblioteca externa. Puedes hacer con "para":
fuente
String
generados durante este ciclo ... si hay 10000
...Hice algunas pruebas de referencia y descubrí que la forma más rápida (con mucho) es esta solución:
Especialmente las expresiones regulares son muy lentas en una iteración larga. (Necesitaba encontrar la forma más rápida para un trabajo por lotes).
fuente
¿Y qué hay de solo buscar el primer carácter distinto de cero?
Esta expresión regular encuentra el primer dígito entre 1 y 9 seguido de cualquier número de dígitos, por lo que para "00012345" devuelve "12345" . Se puede adaptar fácilmente para cadenas alfanuméricas.
fuente