String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但出現此錯誤。分割(「\」)和錯誤
異常線程 「main」 java.util.regex.PatternSyntaxException:近索引1
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但出現此錯誤。分割(「\」)和錯誤
異常線程 「main」 java.util.regex.PatternSyntaxException:近索引1
意外的內部錯誤應該是
String[] strArray = str.split("\\\\");
的原因是因爲在Regex
, \
有特殊含義,因此您需要將其轉義爲\\
。
和在Java中,\\
應等於\\\\
String.split(String regex)
方法採取作爲一個參數RegEx
。
正則表達式\
是\\\\
嘗試
String[] strArray = str.split("\\\\");
我們之所以使用"\\\\"
,
正則表達式\
是\\
現在\\
被視爲\
申請逃逸CHARACT呃邏輯(\n
=新的生產線,\\
= \
)
所以有"\\"
我們使用"\\\\"
希望這不是混淆..:d
也謝謝你 – evilYoung
這並沒有太大的意義。您的原始字符串使用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);
}
對於一般的解決方案有關轉義:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split(StringEscapeUtils.escapeJava("\\"));
明白了。非常感謝你 – evilYoung
原始字符串中沒有斜槓。 – assylias
@assylias yes原始字符串中沒有斜槓。但指出的例外是因爲無效的正則表達式。 –