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

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

但出現此錯誤。分割(「\」)和錯誤

異常線程 「main」 java.util.regex.PatternSyntaxException:近索引1

回答

12

意外的內部錯誤應該是

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

的原因是因爲在Regex\有特殊含義,因此您需要將其轉義爲\\

和在Java中,\\應等於\\\\

+0

明白了。非常感謝你 – evilYoung

+0

原始字符串中沒有斜槓。 – assylias

+2

@assylias yes原始字符串中沒有斜槓。但指出的例外是因爲無效的正則表達式。 –

3

String.split(String regex)方法採取作爲一個參數RegEx

正則表達式\\\\\

嘗試

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

我們之所以使用"\\\\"

正則表達式\\\

現在\\被視爲\申請逃逸CHARACT呃邏輯(\n =新的生產線,\\ = \

所以有"\\"我們使用"\\\\"

希望這不是混淆..:d

+0

也謝謝你 – evilYoung

0

這並沒有太大的意義。您的原始字符串使用Unicode字符,等於ThinkPad。因此,無論如何不會有任何反彈。

換句話說,下面的代碼打印ThinkPad兩次:

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

甚至更​​清楚,下面的代碼打印true:

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