分割功能无法正常工作

时间:2013-09-18 06:54:20

标签: java

我正在尝试使用java

中的拆分功能拆分字符串
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 个答案:

答案 0 :(得分:13)

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

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

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

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

<强>更新

Handling special characters in java:OFFICIAL DOCS

作为旁注:

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

答案 1 :(得分:5)

  

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

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

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

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

答案 2 :(得分:3)

您应该使用.split("\\|");代替.split("|");

答案 3 :(得分:1)

尝试

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