我正在尝试使用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函数不能拆分由“|”
分隔的字符串答案 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("\\|");