2011-08-01 22 views
36

¿Es posible que split devuelva un nulo String[]? Tengo curiosidad porque quiero tratar de ser lo más defensivo posible en mi código sin tener controles innecesarios. El código es el siguiente:¿Es posible que Java String.split pueda devolver una Cadena nula []

String[] parts = myString.split("\\w"); 

necesito para realizar una comprobación nula antes de que yo utilizo parts posterior división?

Respuesta

44

Nunca devuelve nulo. Siempre debe verificar el javadoc del método si no está seguro. Por ejemplo String#split(String) dice

Este método funciona como si invocando el argumento de dos split método

... y String#split(String,int) dice:

Si la expresión no coincide con ninguna parte de la entrada, la matriz resultante tiene solo un elemento, a saber, esta cadena.

De Javadoc también puede averiguar qué tipo de excepciones pueden suceder y, lo que es más importante, por qué se lanzaron esas excepciones. También es muy importante verificar si las clases son seguras para hilos o no.

+0

¡Comprobé javadoc, devolviendo null! = Lanzando NPE. Vi la excepción PatternException que puede arrojar. – Woot4Moo

+4

El Javadoc para 'split (String regex)' no indica que no se puede devolver el nulo. – Paul

+2

@Paul: No, pero si 'null' pudiera devolverse, esto (o los documentos' Pattern # split') lo dirían.Y la versión de dos argumentos, que el único argumento dice que llama, dice * "Si la expresión no coincide con ninguna parte de la entrada, entonces la matriz resultante tiene solo un elemento, concretamente esta cadena". * –

1

No, no es necesario que verifique nulo en las piezas.

1

método de Split llama al método Patter.split que hace esto en el principio del método:

ArrayList<String> matchList = new ArrayList<String>();

Y al final hace matchList.toArray() para devolver una matriz.

Así que no hay necesidad de probar los valores nulos.

+6

Nunca confíe en mirar la implementación. La implementación puede cambiar. La documentación es el contrato para el que está trabajando. –

+1

Verdadero ... pero es poco probable que la implementación de este método cambie, o todo el mundo de Java que haya usado este método sin una comprobación nula estará en desorden. –

+1

En este caso, está claro de los documentos que si cambia, no debe devolver 'null'. –

6

Le recomiendo que descargue el código fuente de Java para aquellos momentos en que la API no está clara. Todas las respuestas aquí solo te dicen la respuesta, pero realmente deberías verlo por ti mismo. Puede descargar el código fuente de Java desde here (mire cerca de la parte inferior de la página).

Al seguir el código fuente, terminará en String[] Pattern.split(CharSequence input, int limit). El valor de retorno proviene de un ArrayList no nulo en el que se llama toArray. toArray no devuelve nulo: en el caso de una lista vacía, obtendrá una matriz vacía de nuevo.

Por lo tanto, al final, no, no tiene que comprobar nulo.

+0

Véase T.J. El comentario de Crowder en otro lugar. – EJP

Cuestiones relacionadas