¿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.
- Android Image Viewer de la aplicación
- Acceso a appView desde Cordova 5.0.0
- Evitar / prevenir que un fragmento se refresque al cambiar las pestañas
- Un ligero retraso al hacer clic en un botón
- No se puede obtener String.split () para funcionar como se esperaba en android
Esto es Java compilado para la versión de Android SDK de compilación 21. Estoy deseando saber qué detalle obvio me falta.
- No se puede abrir el puerto del depurador: java.net.ConnectException "Conexión rechazada"
- Android complejo método onDraw () vs diseño personalizado
- ¿Cómo añadir Google Play Services a un proyecto Android Studio que no esté en niveles?
- rxjava interval () tiempo de reinicio después de algún evento
- Problemas de serialización java con JVM diferentes
- Variable 'snackbar' podría no haber sido inicializado
- Envía datos en tiempo real de java a Android
- Android ImageView.setMatrix () y .invalidate () - el repintado toma demasiado tiempo
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 elige la imagen de la galería que muestra el error de memoria
- Android, función add () de ArrayAdapter no funciona