Java官方文档声明:

例如,字符串“boo:and:foo”使用这些表达式产生以下结果 正则表达式的结果 :

{ "boo", "and", "foo" }"

这就是我想要的工作方式。然而,如果我运行这个:

public static void main(String[] args){
        String test = "A|B|C||D";

        String[] result = test.split("|");

        for(String s : result){
            System.out.println(">"+s+"<");
        }
    }

它打印:

><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<

这与我的预期相差甚远:

>A<
>B<
>C<
><
>D<

为什么会这样?


你需要

test.split("\\|");

split使用正则表达式,在正则表达式中|是表示OR操作符的元字符。您需要使用\(在字符串中写为“\\”,因为\也是字符串字面量中的元字符,需要另一个\来转义它)。

你也可以使用

test.split(Pattern.quote("|"));

让Pattern。引用创建表示|的正则表达式的转义版本。


split()方法以正则表达式作为参数


使用正确的转义:string.split("\\|")

或者,在Java 5+中,使用helper Pattern.quote(),它正是为此目的而创建的:

string.split(Pattern.quote("|"))

它适用于任意输入字符串。在需要引用/转义用户输入时非常有用。


你也可以使用apache库来这样做:

StringUtils.split(test, "|");

使用以下代码:

public static void main(String[] args) {
    String test = "A|B|C||D";

    String[] result = test.split("\\|");

    for (String s : result) {
        System.out.println(">" + s + "<");
    }
}

你也可以使用.split("[|]")。

(我用这个代替了.split("\\|"),这对我来说并不管用。)


test.split("\\|",999);

例如:“boo|||a”或“||boo|”或“|||”。

但test.split(“\ \ |”);将为相同的示例返回不同长度的字符串数组。

使用参考:link