1 public static void main(String[] args) { 2 String line = "ABCDEFG666dcab"; 3 String pattern = "(\\D*)(\\d+)(.*)"; 4 Pattern r = Pattern.compile(pattern); 5 Matcher m = r.matcher(line); 6 System.out.println("Found value: " + m.group(0)); 7 System.out.println("Found value: " + m.group(1)); 8 System.out.println("Found value: " + m.group(2)); 9 System.out.println("Found value: " + m.group(3)); 10 }
上述代码的原本目的是捕获字符串的三个部分:ABCDEFG,666还有dcba,但是真正运行的时候却报出了异常
修改成下面的形式即可
1 public static void main(String[] args){ 2 String line = "ABCDEFG666dcab"; 3 String pattern = "(\\D*)(\\d+)(.*)"; 4 Pattern r = Pattern.compile(pattern); 5 Matcher m = r.matcher(line); 6 if (m.find( )) { 7 System.out.println("Found value: " + m.group(0) ); 8 System.out.println("Found value: " + m.group(1) ); 9 System.out.println("Found value: " + m.group(2) ); 10 System.out.println("Found value: " + m.group(3) ); 11 } else { 12 System.out.println("NO MATCH"); 13 } 14 }
关于为什么可以这么改,以及find的具体含义,可以看一下我的另一篇随笔https://www.cnblogs.com/owczhlol/p/12926609.html