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

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