为什么下面的输出是[]
而不是[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]
答案 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("\|");