1

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]

4

4 回答 4

5

String.split(regex)接受正则表达式。在 regex world |is a中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("[|]"));
于 2013-02-13T15:58:02.707 回答
1
"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("|");

这不起作用,因为 split 的参数实际上是一个正则表达式,其中 | 有特殊的意义。

原因是 split() 的参数被编译成正则表达式;并且需要引用正则表达式中的特殊字符

反斜杠一般也是字符串的转义字符,需要加倍

试试这个:

"CENTURY:a,b,c|HALF_CENTURY:c,d,e".split("\\|");
于 2013-02-13T15:58:43.503 回答
0

尝试

split("\\|")

你需要逃避|

于 2013-02-13T15:58:43.167 回答
0

您正在寻找Pattern.quote(String). 有关详细信息,请参见此处

于 2013-02-13T16:03:37.733 回答