我有一个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
有人可以解释可能的原因。
答案 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)
这是一个元字符。用反斜杠逃避它,如下所示:"\\|"