Java 官方文档指出:
例如,字符串 "boo:and:foo"
使用这些表达式产生以下结果正则表达式结果:
{ "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
使用正则表达式,在正则表达式中|
是表示OR
运算符的元字符。您需要使用 转义该字符(
"\"
用字符串编写,因为也是字符串文字中的元字符,需要另一个
才能转义它)。
您也可以使用
test.split(Pattern.quote("|"));
并让Pattern.quote
创建表示|
的正则表达式的转义版本。
使用正确的转义:string.split("\|")
或者,在 Java 5+ 中,使用为此目的而创建的帮助程序Pattern.quote()
:
string.split(Pattern.quote("|"))
它适用于任意输入字符串。当您需要引用/转义用户输入时非常有用。
使用以下代码:
public static void main(String[] args) {
String test = "A|B|C||D";
String[] result = test.split("\|");
for (String s : result) {
System.out.println(">" + s + "<");
}
}
你也可以使用 apache 库来做这个:
StringUtils.split(test, "|");
使用 .split("[|]")
.
(我用这个代替了.split("\|")
,这对我不起作用。
test.split("\|",999);
指定限制或最大值对于以下示例是准确的:"boo|||a"或"||嘘|" 或" |||"
但是test.split("\|");
将为相同的示例返回不同长度的字符串数组。
使用参考:链接
() 方法将正则表达式作为参数