una separar posicion por parte manejo extraer ejemplos caracteres caracter cadenas cadena buscar agregar java regex string split indexoutofboundsexception

separar - manejo de cadenas en java



Cadena de Java dividida con "."(Punto) (4)

"." es un carácter especial en java, así que tienes que usar "//." para escapar de este personaje:

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

espero que esto ayude

Esta pregunta ya tiene una respuesta aquí:

¿Por qué la segunda línea de este código en Java lanza ArrayIndexOutOfBoundsException ?

String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split(".")[0];

Mientras que abajo trabaja:

String driveLetter = filename.split("/")[0];

Yo uso Java 7.


Creo que deberías escapar del punto. Tratar:

String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split("//.")[0];

De lo contrario, el punto se interpreta como cualquier carácter en expresiones regulares.


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

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


Necesita escapar del punto si desea dividir en un punto literal :

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

De lo contrario estás dividiendo en el regex . , que significa "cualquier personaje".
Tenga en cuenta la doble barra invertida necesaria para crear una sola barra invertida en la expresión regular.

Obtendrá una 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 un punto; split(regex) elimina todos los espacios en blanco finales del resultado, pero como la división de un punto en un punto deja solo dos espacios en blanco, una vez que se eliminan los espacios en blanco se deja una matriz vacía.

Para evitar obtener una 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 el limit es negativo , el comportamiento de eliminar los espacios en blanco finales de la matriz resultante se desactiva:

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

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