使用 split(“|”) 按管道符号拆分 Java 字符串

2022-08-31 06:08:10

Java官方文档指出:

例如,字符串使用以下表达式 Regex Result 生成以下结果:"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<

为什么会发生这种情况?


答案 1

你需要

test.split("\\|");

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

您还可以使用

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

并让创建表示 的正则表达式的转义版本。Pattern.quote|


答案 2

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

或者,在Java 5 +中,使用正是为此目的而创建的帮助程序Patent.quote():

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

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