15

为什么在下面的输出是[]而不是[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]
4

6 回答 6

24

尝试转义该字符:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");
于 2013-03-05T14:11:16.560 回答
15

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

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

于 2013-03-05T14:11:26.967 回答
6

split方法接收一个正则表达式作为参数。管道是一个保留字符,有它自己的用途(意思是or)。

您可以转义它 ( "\\|"),或者,如果您使用的是 Java 1.5+,您可以Pattern.quote("|")像这样使用:

input.split(Pattern.quote("|"));
于 2013-03-05T14:14:33.787 回答
4

尝试在拆分时使用\\|而不是,|因为您需要转义它。

因此,您的代码将更改为:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");
于 2013-03-05T14:11:41.747 回答
3

你必须转义字符'|' 适当地

String input="1|2|3";
        String[] values= input.split("\\|");
        System.out.println("[" + values[0] + "]");
于 2013-03-05T14:13:43.017 回答
-2

管道字符等效于正则表达式中的逻辑或。如果你真的想使用管道字符作为分隔符,你需要用 a 转义\

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

于 2013-03-05T14:14:32.377 回答