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

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

ancak bu hata oluştu. İplik "ana" java.util.regex.PatternSyntaxException içindebölünmüş ("\") ve hata

İstisna: endeksi 1

cevap

12

yakın Beklenmedik dahili hata o

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

nedeni olmalıdır yüzden Regex nedeniyle, \'un özel bir anlamı vardır, bu yüzden \\'a aktarmanız gerekir.

ve Java

, \\ eşit

+0

anladı. çok teşekkür ederim – evilYoung

+0

Orijinal dizede eğik çizgi yok. – assylias

+2

@assylias evet Orijinal dizede eğik çizgi yok. Ancak, işaret edilen istisna geçersiz normalden dolayıdır. –

3

String.split(String regex)\\\\ yöntem parametresi bir RegEx olarak almak gerekir. \ için

Regex \\\\

biz "\\\\" kullanmamın nedeni

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

Nedeni, \ için

Regex Şimdi \\\ olarak kabul edilir \\

kaçış charact uygulamak olduğunu deneyin olduğunu

Yani "\\" olması er mantığı ( \n = Yeni hat, = \ \\) biz "\\\\"

onun kafa karıştırıcı değil Umut kullanın ..: D

+0

ve ben de teşekkür ederim – evilYoung

0

çok mantıklı değil o. Orijinal dizeniz unicode karakterleri kullanır ve ThinkPad'a eşittir. Yani zaten kaldırmak için eğik çizgi yoktur. Başka bir deyişle

, kod aşağıda iki kez ThinkPad yazdırır:

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

Hatta daha net, kod aşağıda doğrudur yazdırır:

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