具有管道特殊字符的Java: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 |

我有一个字符串=“你好,新世界”。当我对不同的正则表达式值使用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
|
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它将是准确的。