使用管道符号作为分隔符拆分字符串
为什么在下面,输出是[]
而不是[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]
试着逃避那个角色:
String input="1|2|3"; String[] values= input.split("\\|"); System.out.println("[" + values[0] + "]");
因为|
在正则表达式中有特殊含义。 你需要像这样逃避: \|
在Java中你也必须逃避反斜杠,所以你最终得到了\\|
管道字符是一个析取运算符,这意味着它告诉正则表达式引擎在其左侧和右侧选择任一模式。 在你的情况下那些空字符串匹配任何东西。
split
方法接收正则表达式作为参数。 管道是具有其自身目的的保留字符(表示or
)。
您可以将其转义( "\\|"
),或者,如果您使用的是Java 1.5+,则可以使用Pattern.quote("|")
如下所示:
input.split(Pattern.quote("|"));
尝试使用\\|
而不是|
当你分开时,你需要逃避它。
所以你的代码将改为:
String input="1|2|3"; String[] values= input.split("\\|"); System.out.println("[" + values[0] + "]");
你必须逃避角色’|’ 正确
String input="1|2|3"; String[] values= input.split("\\|"); System.out.println("[" + values[0] + "]");
管道字符等同于逻辑或正则表达式。 如果你真的想使用管道字符作为分隔符,你需要使用\
来转义它
String[] values= input.split("\|");