我正在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
中的转义字符,因为我们可以直接使用.
。
答案 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"]