Saltar al contenido

Cadena de Java dividida con “.” (punto)

Solución:

Necesitas escapar del punto si quieres dividir en un literal punto:

String extensionRemoved = filename.split("\.")[0];

De lo contrario, se está dividiendo en la expresión regular ., que significa “cualquier carácter”.
Tenga en cuenta la doble barra invertida necesaria para crear una sola barra invertida en la expresión regular.


Estás recibiendo un ArrayIndexOutOfBoundsException porque su cadena de entrada es solo un punto, es decir ".", que es un caso de borde que produce una matriz vacía cuando se divide en puntos; split(regex) elimina todos los espacios en blanco finales del resultado, pero dado que dividir un punto en un punto deja solo dos espacios en blanco, después de eliminar los espacios en blanco finales, queda una matriz vacía.

Para evitar conseguir un ArrayIndexOutOfBoundsException para este caso de borde, use la versión sobrecargada de split(regex, limit), que tiene un segundo parámetro que es el límite de tamaño para la matriz resultante. Cuando limit es negativo, el comportamiento de eliminar espacios en blanco finales de la matriz resultante está deshabilitado:

".".split("\.", -1) // returns an array of two blanks, ie ["", ""]

es decir, cuando filename es solo un punto ".", llamando filename.split("\.", -1)[0] devolverá un espacio en blanco, pero llamando filename.split("\.")[0] lanzará un ArrayIndexOutOfBoundsException.

El punto “.” es un carácter especial en el motor de expresiones regulares de Java, por lo que debe usar “\”. para escapar de este personaje:

final String extensionRemoved = filename.split("\.")[0];

espero que esto ayude

Esto es porque . es un carácter reservado en una expresión regular, que representa cualquier carácter. En su lugar, deberíamos usar la siguiente declaración:

String extensionRemoved = filename.split("\.")[0];
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *