使用split("|")通过管道符号拆分Java String

blu*_*llu 190 java regex string

Java官方文档指出:

"boo:and:foo"例如,字符串使用这些表达式生成以下结果Regex结果:

{ "boo", "and", "foo" }"
Run Code Online (Sandbox Code Playgroud)

这就是我需要它工作的方式.但是,如果我运行这个:

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

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

        for(String s : result){
            System.out.println(">"+s+"<");
        }
    }
Run Code Online (Sandbox Code Playgroud)

它打印:

><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Run Code Online (Sandbox Code Playgroud)

这远非我所期望的:

>A<
>B<
>C<
><
>D<
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Jig*_*shi 411

你需要

test.split("\\|");
Run Code Online (Sandbox Code Playgroud)

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

你也可以使用

test.split(Pattern.quote("|"));
Run Code Online (Sandbox Code Playgroud)

然后Pattern.quote创建表示的正则表达式的转义版本|.

  • 它是,[`split()`](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29)方法采用正则表达式和`|`是reg ex的特殊字符 (17认同)

Aar*_*lla 31

使用适当的转义: string.split("\\|")

或者Pattern.quote()为此目的创建的帮助程序:

string.split(Pattern.quote("|"))
Run Code Online (Sandbox Code Playgroud)

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

  • 在进行转换时并不舒服,但在Java 8中,人们会使用`Pattern.quote()`. (3认同)

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