分割功能无法正常工作

Abh*_*jit 4 java

我试图在java中使用Split函数拆分字符串

String empName="employee name | employee Email";
String[] empDetails=empName.split("|");
Run Code Online (Sandbox Code Playgroud)

它给了我结果

empDetails[0]="e";
empDetails[1]="m";
empDetails[2]="p";
empDetails[3]="l";
empDetails[4]="o";
empDetails[5]="y";
empDetails[6]="e";
empDetails[7]="e";
.
.
.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试遵循代码时

String empName="employee name - employee Email";
String[] empDetails=empName.split("-");
Run Code Online (Sandbox Code Playgroud)

它给了我

 empDetails[0]="employee name ";
 empDetails[1]=" employee Email";
Run Code Online (Sandbox Code Playgroud)

为什么java split函数不能拆分由"|"分隔的字符串

Sur*_*tta 13

String#split()方法接受a regex而不是a String.

因为| 是一个元字符,它在正则表达式中具有特殊含义.

当你逃避它时它会起作用.

String[] empDetails=empName.split("\\|");
Run Code Online (Sandbox Code Playgroud)

更新:

处理java中的特殊字符:OFFICIAL DOCS.

作为旁注:

在java方法名称中以小写字母开头.它应该split()不是...不是Split()大写字母s


Ste*_*n C 5

但我的问题是为什么我们必须在"|"的情况下使用转义 而不是" - "

因为"|"是一个正则表达式的元字符.这意味着"交替"; 例如"A|B"意味着匹配"A""B".如果您在理解PatternJava正则表达式时遇到问题,那么javadocs将描述完整的Java正则表达式语法.

因此,当您拆分"|"(没有转义!)时,您指定分隔符为"无或无",并且在目标字符串的每个字符之间匹配.

(对于记录,"-"也是元字符,但仅限于"[..]"字符组.在其他情况下,它不需要转义.)