s.split(" \\ d")java正则表达式混淆

时间:2014-05-09 13:58:09

标签: java regex

String s="a1b2c3";    
String sarr[]=s.split(".*[\\d].*");//
for(String var:sarr)
     System.out.println("S: "+var);
     System.out.println(sarr.length);

为什么sarr为空?

如果您将//行替换为以下内容:

String sarr[]=s.split("\\d");

为什么这会输出a b c

1 个答案:

答案 0 :(得分:0)

javadocs

  

将此字符串拆分为给定正则表达式的匹配项。

     

此方法的作用就像通过调用给定表达式的双参数split方法和 limit参数为零一样。因此,尾随空字符串不包含在结果数组中。

表达式.*[\d].*匹配整个String,即a1b2c3是要分割的内容,因此只剩下两个空字符串,可以保存到数组中,这种方法不会因为限制0

String sarr[]=s.split(".*[\\d].*", -1);

显示那两个空字符串

S: 
S: 
2

您可以通过打印来测试匹配

System.out.println(s.matches(".*[\\d].*"));

输出为true

表达式\d123匹配,因此会进行拆分,从而产生[a, b, c]