206

Java 官方文档指出:

"boo:and:foo"例如, string使用这些表达式 Regex Result 产生以下结果:

{ "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<

为什么会这样?

4

7 回答 7

446

你需要

test.split("\\|");

split使用正则表达式,并且在正则表达式 |中是表示OR运算符的元字符。您需要使用转义该字符\(用 String 编写,"\\"因为\它也是 String 文字中的元字符,需要另一个\来转义它)。

你也可以使用

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

并让我们Pattern.quote创建代表 . 的正则表达式的转义版本|

于 2012-05-29T09:10:47.180 回答
36

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

或者,在 Java 5+ 中,使用Pattern.quote()专门为此目的创建的帮助程序:

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

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

于 2014-01-09T16:07:53.940 回答
6

使用此代码:

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

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

    for (String s : result) {
        System.out.println(">" + s + "<");
    }
}
于 2016-09-01T08:46:58.943 回答
3

您还可以使用 apache 库并执行以下操作:

StringUtils.split(test, "|");
于 2015-11-29T13:48:37.100 回答
1

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

(我用这个代替了.split("\\|"),这对我不起作用。)

于 2016-11-04T12:40:35.680 回答
0
test.split("\\|",999);

对于以下示例,指定限制或最大值将是准确的:“boo|||a”或“||boo|” 或“|||”

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

使用参考:链接

于 2018-09-20T11:14:15.123 回答
-2

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

于 2013-08-20T11:02:05.607 回答