使用split(“|”)通过pipe道符号分割Javastring

Java官方文档指出:

例如,string"boo:and:foo"用这些expression式产生以下结果正则expression式结果:

 { "boo", "and", "foo" }" 

这就是我需要它工作的方式。 但是,如果我运行这个:

 public static void main(String[] args){ String test = "A|B|C||D"; String[] result = test.split("|"); for(String s : result){ System.out.println(">"+s+"<"); } } 

它打印:

 >< >A< >|< >B< >|< >C< >|< >|< >D< 

这与我所期望的相差甚远:

 >A< >B< >C< >< >D< 

为什么发生这种情况?

提前致谢

你需要

 test.split("\\|"); 

split使用正则expression式,并在正则expression式 | 是代表OR运算符的元字符。 您需要使用\转义该字符(由于\也是string中的元字符,并且需要另外的\来转义它),所以用String写成"\\"

你也可以使用

 test.split(Pattern.quote("|")); 

并让Pattern.quote创build代表|的正则expression式的转义版本 。

使用正确的转义: string.split("\\|")

或者为此目的而创build的Helper Pattern.quote()

 string.split(Pattern.quote("|")) 

它可以使用任意的inputstring。 当你需要引用/转义用户input时非常有用。

使用此代码:

 public static void main(String[] args) { String test = "A|B|C||D"; String[] result = test.split("\\|"); for (String s : result) { System.out.println(">" + s + "<"); } } 

您也可以使用.split("[|]")

(我用这个而不是.split("\\|") ,这对我不起作用。)

你也可以使用Apache库,并执行此操作:

 StringUtils.split(test, "|"); 

split()方法将正则expression式作为参数