2011-10-28 10 views
146

He preparado un fragmento de código simple para separar la parte errónea de mi aplicación web.El método split() en Java no funciona en un punto (.)

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 creaba una aplicación web JSF. Solo quiero saber por qué en el código anterior temp.split(".") no funciona. La instrucción,

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 de costumbre. ¿Cuál podría ser el problema?

+3

Escape it. Dividir funciona en una expresión regular –

+5

¿Yikes, * predeterminado * a expresiones regulares en Java? –

Respuesta

352

java.lang.String.split se divide en expresiones regulares, y . en una expresión regular significa "cualquier carácter".

Probar temp.split("\\.").

+0

Funcionó para mí también. Estaba haciendo por "|" funcionó con "\\ |". Gracias – Bhupinder

2

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

. es el carácter especial que coincide con todos los caracteres de entrada.

Al igual que con cualquier carácter especial de expresión regular, se escapa con un \. Necesita un \ adicional para el escape de cadenas Java.

8

Probar:

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

El método es: ""

String[] split(String regex) 

es un char reservado en regex

52

El documentation on split() dice:

Splits esta cadena alrededor de los partidos de la dada regular expression.

(El subrayado es mío.)

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

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

Siempre es mejor usar Pattern.quote –

10

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

2
private String temp = "mahesh.hiren.darshan"; 

    String s_temp[] = temp.split("[.]"); 

    Log.e("1", ""+s_temp[0]); 
5

\\. 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]; 
    } 
} 
Cuestiones relacionadas