¿Cuándo String.split devuelve una matriz vacía?

Mis registros muestran esta excepción: ArrayIndexOutOfBoundsException: length=0; index=0 ArrayIndexOutOfBoundsException: length=0; index=0 desencadenado por la siguiente pieza de código:

 public static String getInitialsFromFullName(String fullName) { String[] splitNames = fullName.split(" "); String firstName = splitNames[0]; <-- Here ... } 

Estoy tratando de averiguar la condición para que String.split devuelve una matriz vacía. Mi comprensión es que si no se encuentra ninguna coincidencia, se devuelve una matriz de tamaño 1 con la cadena original.

Esto es Java compilado para la versión de Android SDK de compilación 21. Estoy deseando saber qué detalle obvio me falta.

split(regex) devuelve el resultado de split(regex,0) donde 0 es limit . Ahora, según la documentación (el límite está representado por n )

Si n es cero, entonces el patrón se aplicará tantas veces como sea posible, el arreglo puede tener cualquier longitud, y las cadenas vacías al final serán descartadas .

(Énfasis mío)

Significa que en el caso de código como

 "ababaa".split("a") 

Al principio obtendrás la matriz ["", "b","b","",""] pero luego se eliminará la cadena vacía, por lo que terminarás con array ["","b","b"]

PERO si su cadena contiene solo elementos que pueden coincidir con su patrón, como

 "ababab".split("ab") 

En el primer array contendrá ["","","",""] (tres divisiones), pero luego se eliminarán los elementos de seguimiento vacíos, lo que significa que todos los elementos serán eliminados, lo que le dejará con [] Tamaño 0).

Así que para obtener matriz vacía como resultado que necesita dividir en cadena que contiene sólo subcadenas que pueden ser emparejados por el parámetro de split , por lo que en el caso de la split(" ") cadena original debe ser construir sólo a partir de espacios, y su longitud debe ser al menos 1.

BTW si la cadena original quedaría vacía como "" split(" ") no ocurriría así que la matriz con la cadena original sería devuelta, lo que significa que todavía se obtendrá [""] matriz con un elemento, no matriz vacía.

Usted puede decir " pero usted dijo que la cadena vacía de arrastre se eliminan, así que ¿por qué esto no se elimina (está arrastrando y está vacío)? ". Bueno, usted necesita entender que la eliminación de las cadenas vacías de arrastre tiene sentido sólo si estas cadenas de resultado de ware de la división , por lo que si la división no sucedió, resultado será matriz que contiene la cadena original como se explica en mi respuesta anterior sobre este tema.

  • Android Estática Inicialización opencv 3.0 No se puede cargar la biblioteca "opencv_java3"
  • Los fragmentos de Viewpager de Android se actualizan al pasar
  • Cómo cambiar la cámara Android a la vertical en la vista de superficie?
  • Cómo combinar a dos mapa de bits uno sobre otro
  • Regex para determinar las tarjetas de crédito en Android
  • Cómo extender la clase android con delphi xe5
  • Cómo utilizar Google Api de traducción en mi aplicación de Android
  • Recyclerviews en ViewPager
  • El desarrollo de Android cambia la visibilidad de TextView
  • Fragmentos Tipos incompatibles
  • Cómo detectar si es el botón Recents, el modo Multi Window o el botón home onUserLeaveHint ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.