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<
为什么会这样?
答案 0 :(得分:390)
你需要
test.split("\\|");
split
使用正则表达式,正则表达式 |
是表示OR
运算符的元字符。您需要使用\
来转义该字符(以字符串形式编写为"\\"
,因为\
也是字符串文字中的元字符,需要另一个\
来转义它。)
您也可以使用
test.split(Pattern.quote("|"));
让Pattern.quote
创建代表|
的正则表达式的转义版本。
答案 1 :(得分:30)
使用正确的转义:string.split("\\|")
或者为此目的而创建的助手Pattern.quote()
:
string.split(Pattern.quote("|"))
适用于任意输入字符串。当你需要引用/转义用户输入时非常有用。
答案 2 :(得分:4)
使用此代码:
public static void main(String[] args) {
String test = "A|B|C||D";
String[] result = test.split("\\|");
for (String s : result) {
System.out.println(">" + s + "<");
}
}
答案 3 :(得分:2)
您也可以使用apache库并执行此操作:
StringUtils.split(test, "|");
答案 4 :(得分:1)
您也可以使用.split("[|]")
。
(我使用的是.split("\\|")
代替BufferedReader br = null;
try {
br = new BufferedReader(...);
// do stuff
}
finally {
if (br != null) {
br.close();
}
}
,这对我不起作用。)
答案 5 :(得分:0)
test.split("\\|",999);
对于以下示例,指定一个限制或最大值将准确:或“ |||”
但是test.split("\\|");
对于相同的示例将返回不同长度的字符串数组。
使用参考:link
答案 6 :(得分:-2)
split()方法将正则表达式作为参数