Java - ¿Por qué fracción de cadena para una cadena vacía dame un conjunto no vacío?

Tom Joe:

Quiero dividir una cadena por un espacio. Cuando uso una cadena vacía, espero obtener un conjunto de cuerdas de cero. En su lugar, me sale una matriz con única cadena vacía. Por qué ?

public static void main(String [] args){
    String x = "";
    String [] xs = x.split(" ");
    System.out.println("strings :" + xs.length);//prints 1 instead of 0.
}
kaya3:

Un interesante rompecabezas de hecho:

> "".split(" ")
String[1] { "" }
> " ".split(" ")
String[0] {  }

La pregunta es, cuando se divide la cadena vacía, ¿por qué el resultado contiene la cadena vacía, y cuando se divide un espacio, ¿por qué el resultado no contiene nada? Parece contradictorio, pero todo se explica en la documentación.

El String.split(String)método "funciona como si invocando el método de división de dos argumentos con la expresión dada y un argumento límite de cero" , por lo que vamos a leer la documentación para String.split(String, int). El caso de la cadena vacía es contestada por esta parte:

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

La cadena vacía no tiene parte coincide con un espacio, por lo que la salida es una matriz que contiene un elemento, la cadena de entrada, exactamente como los documentos dicen que debería suceder.

El caso de la cadena " "es contestada por estas dos partes:

Un partido de anchura cero al principio sin embargo, nunca produce tal subcadena líder vacía.

Si n es cero, entonces el patrón se puede aplicar tantas veces como sea posible, la matriz puede tener cualquier longitud, y posterior cadenas vacías será descartado.

La cadena de entrada entera " "coincide con el patrón de división. En principio podríamos incluir una cadena vacía a cada lado del partido, pero los doctores decir que una subcadena que conduce vacío no está incluido, y (debido a que el parámetro de límite de n = 0), la cadena vacía se arrastra también se descarta. Por lo tanto, las cadenas vacías antes y después del partido son ambos no incluidos en la matriz resultante, por lo que es vacío.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=275893&siteId=1
Recomendado
Clasificación