具有管道特殊字符的Java:split()方法
我有一个字符串=“你好,新世界”。当我对不同的正则表达式值使用split()方法时,它的行为会有所不同具有管道特殊字符的Java:split()方法,java,regex,split,Java,Regex,Split,我有一个字符串=“你好,新世界”。当我对不同的正则表达式值使用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”,我会得到完全不同的答案。新输出变为: h e l l o |
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”,我会得到完全不同的答案。新输出变为:
h
e
l
l
o
|
n
e
w
|
w
o
r
l
d
有人能解释一下可能的原因吗。在第二种情况下,您可能正在拆分
“|”
,而|
在正则表达式中有特殊的含义。如果要在实际管道角色上拆分,应将其转义:
String[] bits = whole.split(Pattern.quote("|"));
在第二种情况下,您可能正在拆分
“|”
,
在正则表达式中具有特殊意义。如果要在实际管道角色上拆分,应将其转义:
String[] bits = whole.split(Pattern.quote("|"));
管道是特殊的正则表达式符号,表示
或
,如果要按管道拆分,请在正则表达式中转义:
String[] strbuf = str.split("\\|");
或
管道是特殊的正则表达式符号,表示
或
,如果要按管道拆分,请在正则表达式中转义:
String[] strbuf = str.split("\\|");
或
将正则表达式作为输入。管道是正则表达式的特殊字符,因此如果要使用它,需要转义特殊字符。有多种解决方案:
您需要转义“管道”字符
str.split("\\|");
或者,您可以使用帮助器报价:
str.split(Regexp.quote("|"))
或在SQARE之间:
str.split("[|]");
将正则表达式作为输入。管道是正则表达式的特殊字符,因此如果要使用它,需要转义特殊字符。有多种解决方案:
您需要转义“管道”字符
str.split("\\|");
或者,您可以使用帮助器报价:
str.split(Regexp.quote("|"))
或在SQARE之间:
str.split("[|]");
未转义的
|
被解析为表示“空字符串或空字符串”的正则表达式,因此请使用
|
具有特殊含义,或者在正则表达式中,未转义的|
被解析为表示“空字符串或空字符串”的正则表达式,因此请使用
str.split("|");
|
具有特殊含义或在正则表达式中
str.split("|");
意思不同String#split
使用,并且|
是一个元字符,因此该字符串表示:剥离空字符串或剥离空字符串。这就是字符串在每个字符上被拆分的原因
"[|]"
str.split("\\|");
有几种方法可以实现您的期望(将它们用作要拆分的字符串):
这意味着要逃避元字符
"[|]"
str.split("\\|");
将元字符放入字符类中
"\\Q|\\E"
将元字符放在引号中
意思不同String#split
使用,并且|
是一个元字符,因此该字符串表示:剥离空字符串或剥离空字符串。这就是字符串在每个字符上被拆分的原因
"[|]"
str.split("\\|");
有几种方法可以实现您的期望(将它们用作要拆分的字符串):
这意味着要逃避元字符
"[|]"
str.split("\\|");
将元字符放入字符类中
"\\Q|\\E"
将元字符放在引号中管道在正则表达式中具有不同的含义,因此如果要使用它,需要转义特殊字符
"[|]"
str.split("\\|");
管道在正则表达式中具有不同的含义,因此如果要使用它,需要转义特殊字符
"[|]"
str.split("\\|");
这是一个元字符。用反斜杠将其转义,如下所示:
“\\\\”
它是一个元字符。使用反斜杠将其转义,如下所示:“\\\\”
使用apache StringUtils它将是准确的。使用apache StringUtils它将是准确的。