split字符串方法的奇怪行为

4

考虑以下简单的代码:

public class Main {

    public static void main(String[] args) {

        String string = "Lorem,ipsum,dolor,sit,amet";
        String[] strings = string.split(",");

        for (String s : strings) {
            System.out.println(s);
        }
    }
}

如预期的一样,输出结果如下:
Lorem
ipsum
dolor
sit
amet

现在考虑上一段代码的变体,在这个版本中,我只是将,替换成了|
public class Main {

    public static void main(String[] args) {

        String string = "Lorem|ipsum|dolor|sit|amet";
        String[] strings = string.split("|");

        for (String s : strings) {
            System.out.println(s);
        }
    }
}

我希望得到相同的输出结果,但却出现了以下奇怪情况:
L
o
r
e
m
|
i
p
s
u
m
|
d
o
l
o
r
|
s
i
t
|
a
m
e
t

有什么问题吗?

1个回答

7

String#split() 方法接受一个正则表达式,而在正则表达式中 | 具有特殊的含义。

为了得到预期结果,请对该 | 进行转义。

String[] splits=string.split("\\|");

或者您可以使用Pattern类来避免所有混乱。
String[] splits= string.split(Pattern.quote("|"));

2
如果分隔符是动态的,例如作为参数传递给您的方法,请使用 .split(Pattern.quote(separator)) - Andreas
@Andreas同意,我也只喜欢Pattern的方式。我只是想澄清OP的疑问。 - Suresh Atta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接