4

我正在尝试使用Java中的Split函数拆分字符串

String empName="employee name | employee Email";
String[] empDetails=empName.split("|");

它给了我结果

empDetails[0]="e";
empDetails[1]="m";
empDetails[2]="p";
empDetails[3]="l";
empDetails[4]="o";
empDetails[5]="y";
empDetails[6]="e";
empDetails[7]="e";
.
.
.

但是当我尝试以下代码时

String empName="employee name - employee Email";
String[] empDetails=empName.split("-");

它给了我

 empDetails[0]="employee name ";
 empDetails[1]=" employee Email";

为什么java split函数不能分割用“|”分隔的字符串

4

4 回答 4

13

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

由于| 是元字符,它在正则表达式中具有特殊含义。

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

String[] empDetails=empName.split("\\|");

更新:

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

作为旁注:

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

于 2013-09-18T06:54:57.450 回答
5

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

因为"|"是一个正则表达式元字符。它的意思是“交替”;eg"A|B"表示匹配"A""B". 如果您在理解 Java 正则表达式时遇到问题,javadocsPattern描述了完整的 Java 正则表达式语法。

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

(为了记录,"-"也是一个元字符,但只在一个"[..]"字符组中。在其他上下文中它不需要转义。)

于 2013-09-18T07:00:43.567 回答
3

你应该使用.split("\\|");而不是.split("|");

于 2013-09-18T06:56:56.470 回答
1

尝试

String[] empDetails=empName.split("\\|");
于 2013-09-18T06:56:04.547 回答