【问题标题】:Strange behavior of split String method [duplicate]split String方法的奇怪行为[重复]
【发布时间】:2015-12-01 15:02:02
【问题描述】:

考虑一下这些简单的代码行:

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

怎么了?

【问题讨论】:

    标签: java string split


    【解决方案1】:

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

    查看| 的预期结果转义。

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

    或者你可以使用Pattern 类,以避免所有的混乱。

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

    【讨论】:

    • 如果分隔符是动态的,例如作为参数传递给您的方法,请使用.split(Pattern.quote(separator))
    • @Andreas 同意,我只喜欢 Pattern 方式。我只是在清除 OP 的疑虑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2021-09-23
    • 2015-05-29
    相关资源
    最近更新 更多