Il metodo split () in Java non funziona su un punto (.)

Ho preparato un semplice frammento di codice per separare la parte errata dalla mia applicazione 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"); } } } 

L’ho testato durante la creazione di un’applicazione Web JSF. Voglio solo sapere perché nel codice precedente temp.split(".") Non funziona. La dichiarazione,

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

visualizza nulla sulla console significa che non passa attraverso il ciclo. Quando cambio l’argomento del metodo temp.split() in altri caratteri, funziona come al solito. Quale potrebbe essere il problema?

java.lang.String.split divide in espressioni regolari, e . in un’espressione regolare significa “qualsiasi carattere”.

Prova temp.split("\\.") .

La documentazione su split() dice:

Divide questa stringa attorno alle corrispondenze dell’espressione regolare specificata.

(Enfasi mia.)

Un punto è un carattere speciale nella syntax delle espressioni regolari. Usa Pattern.quote() sul parametro da dividere () se vuoi che la divisione sia su un modello di stringa letterale:

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

Il metodo prende un’espressione regolare, non una stringa, e il punto ha un significato speciale nelle espressioni regolari. Fuggetelo come se fosse split("\\.") . Hai bisogno di un doppio backslash, il secondo sfugge al primo.

Provare:

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

Il metodo è:

 String[] split(String regex) 

“” è un carattere riservato nell’espressione regolare

\\. è la risposta semplice. Ecco un semplice codice per il tuo aiuto.

 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]); 

Funziona bene. Hai letto la documentazione ? La stringa viene convertita in un’espressione regolare.

. è il carattere speciale che corrisponde a tutti i caratteri di input.

Come con qualsiasi carattere speciale dell’espressione regolare, sfuggi con un \ . È necessario un ulteriore \ per l’escape della stringa Java.