String.split(String delim);
表现得很奇怪,它正在返回在每个字符处拆分字符串并返回与String.toCharArray();
完全相同的输出[并且它让我疯了]
以下是如何重现我的问题:
System.out.println(Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("|")));
输出:[,C,E,N,T,U,R,Y,:,a,,, b ,,, c,|,H,A,L,F,_,C,E,N ,T,U,R,Y,:,c ,,, d ,,, e]
答案 0 :(得分:5)
String.split(regex)
接受正则表达式。在正则表达式世界中|
是meta character(special character)
,使用\\
将其转义为normal character
。
Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("\\|"));
或将其嵌入character class
,[|]
Arrays.toString("CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("[|]"));
答案 1 :(得分:1)
"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("|");
这不起作用,因为split的参数实际上是一个正则表达式,其中|有特殊意义。
原因是split()的参数被编译成正则表达式;和正则表达式中特殊的字符需要引用
反斜杠通常也是字符串的转义字符,需要加倍
试试这个:
"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("\\|");
答案 2 :(得分:0)
尝试
split("\\|")
你需要逃避|
答案 3 :(得分:0)
您正在寻找Pattern.quote(String)
。有关详细信息,请参阅here。