使用管道符号拆分字符串作为分隔符

时间:2013-03-05 14:09:40

标签: java string split

为什么下面的输出是[]而不是[1]

String input="1|2|3";
String[] values= input.split("|");
System.out.println("[" + values[0] + "]");
// Output: []

但是,如果我们更改分隔符,则输出为[1]

String input="1;2;3";
String[] values= input.split(";");
System.out.println("[" + values[0] + "]");
// Output: [1]

6 个答案:

答案 0 :(得分:24)

尝试逃避这个角色:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");

答案 1 :(得分:15)

因为|在正则表达式中具有特殊含义。你需要像这样逃避它:\|并且在Java中你也必须逃避反斜杠,所以最终得到\\|

管道字符是一个析取运算符,这意味着它告诉正则表达式引擎在其左侧和右侧选择任一模式。在你的情况下那些空字符串匹配任何东西。

答案 2 :(得分:6)

split方法接收正则表达式作为参数。管道是一个具有自己目的的保留字符(意味着or)。

您可以将其转义("\\|"),或者,如果您使用的是Java 1.5+,则可以使用Pattern.quote("|"),如下所示:

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

答案 3 :(得分:4)

在分割时尝试使用\\|代替|,因为您需要将其转义。

所以你的代码会改为:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");

答案 4 :(得分:3)

你必须逃避角色'|'适当

String input="1|2|3";
        String[] values= input.split("\\|");
        System.out.println("[" + values[0] + "]");

答案 5 :(得分:-2)

管道字符等同于逻辑或正则表达式。如果您确实想将管道字符用作分隔符,则需要使用\来转义它,如

String[] values= input.split("\|");