使用句点(。)拆分的字符串显示不同的行为

时间:2015-07-24 12:17:25

标签: java string

我正在String上工作,并尝试使用split() .代表: -

String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split(".")));

上面的代码输出[]空数组。但如果我像.一样逃避: -

String s = "Hi.Hello";
System.out.println(Arrays.toString(s.split("\\.")));

正确输出为[Hi, Hello]

所以我想知道: -

为什么我需要转义..它通常不被视为String中的转义字符,因为我们可以直接使用.

3 个答案:

答案 0 :(得分:14)

registerTempTable方法将正则表达式作为参数。用正则表达式"。"意味着"任何角色",所以你必须逃避它(通过添加" \\"),如果你真的想用"。"而不是"任何角色"。

请参阅Pattern的api文档,了解正则表达式的启动程序。

答案 1 :(得分:4)

您不能仅使用.拆分它,因为split()

Splits this string around matches of the given regular expression.

在正则表达式中。表示'匹配任何字符',所以你必须用\\而不是\来转义它,因为你还必须转义\字符!

答案 2 :(得分:1)

对先前答案的补充(这是正确的)。

使用来自Apache Commons Lang(javadoc)的StringUtils.split通常会更好。它采用普通字符串(而不是正则表达式)作为参数。此外,它的行为更直观:

StringUtils.split("a..b.c", ".") = ["a", "b", "c"]

vs

"a..b.c".split("\\.") = ["a", "", "b", "c"]