Split String方法的奇怪行为

ᴜsᴇ*_*sᴇʀ 4 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,输出如下:

Lorem
ipsum
dolor
sit
amet
Run Code Online (Sandbox Code Playgroud)

现在考虑前面的代码中,我只是把的变化,|:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待相同的输出,但奇怪的是以下内容:

L
o
r
e
m
|
i
p
s
u
m
|
d
o
l
o
r
|
s
i
t
|
a
m
e
t
Run Code Online (Sandbox Code Playgroud)

怎么了?

Sur*_*tta 7

String#split()方法接受正则表达式并|在正则表达式中具有特殊含义.

要看到预期的结果逃脱|.

String[] splits=string.split("\\|");
Run Code Online (Sandbox Code Playgroud)

或者你可以使用Pattern课程,以避免所有的混乱.

String[] splits= string.split(Pattern.quote("|"));
Run Code Online (Sandbox Code Playgroud)

  • 如果分隔符是动态的,例如作为参数传递给您的方法,请使用`.split(Pattern.quote(separator))`. (2认同)