El método split () en Java no funciona en un punto (.)

He preparado un fragmento de código simple para separar la parte errónea de mi aplicación web.

public class Main { public static void main(String[] args) throws IOException { System.out.print("\nEnter a string:->"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String temp = br.readLine(); String words[] = temp.split("."); for (int i = 0; i < words.length; i++) { System.out.println(words[i] + "\n"); } } } 

Lo he probado mientras construía una aplicación web JSF. Solo quiero saber por qué en el código anterior temp.split(".") No funciona. La statement,

 System.out.println(words[i]+"\n"); 

no muestra nada en la consola significa que no pasa por el bucle. Cuando cambio el argumento del método temp.split() a otros caracteres, funciona bien como siempre. ¿Cuál podría ser el problema?

java.lang.String.split divide en expresiones regulares, y . en una expresión regular significa “cualquier personaje”.

Pruebe temp.split("\\.") .

La documentación sobre split() dice:

Divide esta cadena alrededor de las coincidencias de la expresión regular dada.

(Énfasis mío)

Un punto es un carácter especial en la syntax de expresiones regulares. Use Pattern.quote() en el parámetro para dividir () si desea que la división esté en un patrón de cadena literal:

 String[] words = temp.split(Pattern.quote(".")); 

El método toma una expresión regular, no una cadena, y el punto tiene un significado especial en las expresiones regulares. Escápelo como tan split("\\.") . Necesitas una doble barra invertida, la segunda escapa la primera.

Tratar:

 String words[]=temp.split("\\."); 

El método es:

 String[] split(String regex) 

“.” es un char reservado en regex

\\. es la respuesta simple. Aquí hay un código simple para su ayuda.

 while (line != null) { // String[] words = line.split("\\."); wr = ""; mean = ""; if (words.length > 2) { wr = words[0] + words[1]; mean = words[2]; } else { wr = words[0]; mean = words[1]; } } 
  private String temp = "mahesh.hiren.darshan"; String s_temp[] = temp.split("[.]"); Log.e("1", ""+s_temp[0]); 

Funciona bien. ¿Leíste la documentación ? La cadena se convierte a una expresión regular.

. es el caracter especial que coincide con todos los caracteres de entrada.

Al igual que con cualquier personaje especial de expresión regular, puedes escapar con un \ . Necesita un \ adicional para el escape de cadena de Java.