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];