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

时间:2012-05-29 09:10:02

标签: java regex string

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<

为什么会这样?

7 个答案:

答案 0 :(得分:390)

你需要

test.split("\\|");

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

您也可以使用

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

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

答案 1 :(得分:30)

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

或者为此目的而创建的助手Pattern.quote()

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

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

答案 2 :(得分:4)

使用此代码:

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

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

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

答案 3 :(得分:2)

您也可以使用apache库并执行此操作:

StringUtils.split(test, "|");

答案 4 :(得分:1)

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

(我使用的是.split("\\|")代替BufferedReader br = null; try { br = new BufferedReader(...); // do stuff } finally { if (br != null) { br.close(); } } ,这对我不起作用。)

答案 5 :(得分:0)

test.split("\\|",999);
对于以下示例,

指定一个限制或最大值将准确:或“ |||”

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

使用参考:link

答案 6 :(得分:-2)

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