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

And*_*con 15 java string split

为什么在下面,输出是[]和不是[1]

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

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

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

use*_*ser 24

试着逃避那个角色:

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


Mik*_*scu 15

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

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


Fri*_*itz 6

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

你可以逃避它("\\|"),或者,如果你是Java 1.5+,你可以Pattern.quote("|")像这样使用:

input.split(Pattern.quote("|"));
Run Code Online (Sandbox Code Playgroud)