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

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

, ale wystąpił błąd.split ("\") i błąd

Wyjątek w wątku "głównym" java.util.regex.PatternSyntaxException: nieoczekiwany błąd wewnętrzny w pobliżu indeksu 1

Odpowiedz

12

powinno być

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

powodem jest, ponieważ w Regex, \ ma specjalne znaczenie, więc musisz uciec przed nim pod \\.

i Java, \\ powinna być równa \\\\

+0

masz. dziękuję bardzo – evilYoung

+0

Nie ma slash w oryginalnym ciągu. – assylias

+2

@assylias Tak, w oryginalnym łańcuchu nie ma ukośnika. Ale wskazany wyjątek wynika z nieprawidłowego wyrażenia regularnego. –

3

String.split(String regex) sposób przyjąć jako parametru a RegEx.

regex dla \ jest \\\\

Spróbuj

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

powód, dla którego używamy "\\\\",

regex \ wynosi \\

Teraz \\ jest traktowany jako \ zastosować znak, co escape logika er (\n = nowa linia, \\ = \)

więc mieć "\\" używamy "\\\\"

Nadzieja jej nie mylące ..: D

+0

i dziękuję też – evilYoung

0

To nie ma sensu. Twój oryginalny ciąg używa znaków Unicode i jest równy ThinkPad. W związku z tym nie ma żadnego slasha do usunięcia.

Innymi słowy, poniższy kod drukuje ThinkPad dwukrotnie:

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

Albo jeszcze wyraźniej, kod poniżej drukuje prawda:

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