2012-11-01 12 views
10
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064"; 

String[] strArray = str.split("\\"); 

ma si è verificato questo errore.split ("\") ed errore

eccezione in filetto java.util.regex.PatternSyntaxException "main": errore interno imprevisto vicino indice 1

risposta

12

dovrebbe essere

String[] strArray = str.split("\\\\"); 

il motivo è perché in Regex, \ ha un significato speciale, quindi è necessario sfuggire a \\.

e in java, \\ dovrebbe essere uguale a \\\\

+0

capito. grazie mille – evilYoung

+0

Non c'è nessuna barra nella stringa originale. – assylias

+2

@assylias sì non c'è nessuna barra nella stringa originale. Ma l'eccezione che viene segnalata è a causa della regex non valida. –

3

String.split(String regex) metodo prendono come parametro un RegEx.

Regex per \ è \\\\

Prova

String[] strArray = str.split("\\\\"); 

Motivo per cui usiamo "\\\\",

Regex per \ è \\

Ora \\ viene trattato come \ applicare la charact fuga logica ER (\n = nuova linea, \\ = \)

in modo da avere "\\" usiamo "\\\\"

Spero non la sua fonte di confusione ..: D

+0

e grazie anche a te – evilYoung

0

che non ha molto senso. La stringa originale utilizza caratteri unicode ed è uguale a ThinkPad. Quindi non c'è nessuna barra da rimuovere comunque.

In altre parole, il codice qui sotto stamperà ThinkPad due volte:

public static void main(String args[]) { 
    String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064"; 
    System.out.println(str); 
    String[] strArray = str.split("\\\\"); 
    System.out.println(Arrays.toString(strArray)); 
} 

O ancora più chiaro, il codice qui sotto stampa vera:

public static void main(String args[]) { 
    String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064"; 
    String str2 = "ThinkPad"; 
    System.out.println(str == str2); 
}