Java:split()方法,带有管道特殊字符

时间:2014-01-19 09:46:42

标签: java regex split

我有一个String =“Hello-new-World”。当我使用具有不同正则表达式值的split()方法时,它的行为方式不同。

String str = "Hello-new-world"
String[] strbuf=str.split("-");
for(int i=0;i<strbuf.length;i++)
 System.out.print(strbuf[i]+" ");

我得到的输出是:

hello
new
world

如果我将我的字符串更改为“Hello | new | world”,我会得到一个完全不同的答案。新输出变为:

h
e
l
l
o
|
n
e
w
|
w
o
r
l
d

有人可以解释可能的原因。

7 个答案:

答案 0 :(得分:7)

据推测,你在第二种情况下分裂"|" - |在正则表达式中具有特殊含义。如果要拆分实际的管道字符,则应该将其转义:

String[] bits = whole.split(Pattern.quote("|"));

答案 1 :(得分:4)

split method将正则表达式作为输入。管道是正则表达式的特殊字符,因此如果要使用它,则需要转义特殊字符。 Ther是多种解决方案:

您需要转义“竖线”字符

str.split("\\|");

或者您可以使用帮助引号:

str.split(Regexp.quote("|"))

或者在sqares之间:

str.split("[|]");

答案 2 :(得分:3)

管道是特殊的正则表达式符号,意思是OR,如果你想通过管道拆分然后在正则表达式中将其转义:

String[] strbuf = str.split("\\|");

OR

String[] strbuf = str.split("[|]");

答案 3 :(得分:0)

未转义的|被解析为正则表达式&#34;空字符串或空字符串,&#34;所以使用

str.split("\\|");

|具有特殊含义或正则表达式

答案 4 :(得分:0)

str.split("|");

意味着不同的东西。 String#split使用regex|是元字符,因此字符串表示:拆分空字符串或关闭空字符串。这就是为什么你的字符串会在每个字符上分开。

有几种方法可以达到预期效果(将这些作为字符串拆分):

"\\|"

这意味着逃避元字符。

"[|]"

将元字符放在字符类中。

"\\Q|\\E"

将元字符放在引号

答案 5 :(得分:0)

管道在正则表达式中具有不同的含义,因此如果要使用它,则需要转义特殊字符。

str.split("\\|");

答案 6 :(得分:0)

这是一个元字符。用反斜杠逃避它,如下所示:"\\|"