Java 分裂字符串方法的奇怪行为

Java 分裂字符串方法的奇怪行为,java,string,split,Java,String,Split,考虑以下几行简单的代码: 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);

考虑以下几行简单的代码:

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
L
o
r
e
m
|
i
p
s
u
m
|
d
o
l
o
r
|
s
i
t
|
a
m
e
t

现在考虑上一个代码的变化,在这里我只是把<代码>,<代码> > <代码> < /代码>:

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
L
o
r
e
m
|
i
p
s
u
m
|
d
o
l
o
r
|
s
i
t
|
a
m
e
t
怎么了?

方法接受正则表达式,并且
|
在正则表达式中有特殊的含义

要查看预期结果,请转义
|

String[] splits=string.split("\\|");
或者你可以使用类,以避免所有的混乱

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

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