这是一个相对容易分裂的Java问题。
public class Main {
public static void main(String[] args) {
String[] tokens = "aa33aaca^aa".split("[\\dc]+");
for (int i = 0; i < tokens.length; i++)
System.out.println(tokens[i]); }
}
我想知道为什么这段代码的输出是
aa
aa
a^aa
“ [\\ dc] +”如何正常工作?
答案 0 :(得分:3)
此regular expression将通过重复至少一次的数字和字符'c'
的任意组合来拆分测试:
\\d
-任何数字[0-9] c
-字符“ c” []+
-此集合内的字符至少可以出现一次所以您的字符串将像这样分割:
1 2
aa[33]aa[c]a^aa
分割定界符:
数字发行2次。
字符c
。
答案 1 :(得分:1)
除上述出色的答案外,请注意,如果您在在线正则表达式测试器(例如rubular或其他)中测试[\\dc]+
,则此正则表达式将与{{1}中的33
不匹配}。他们会说:aa33aaca^aa
。
原因是在\d is mapping to Any digit character(0-9)
中,我们以String.split()
作为参数,因此我们需要另外的String
来形成\
,以使{{1}生效。