日期:2014-05-20  浏览次数:20842 次

java 正则式问题?
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularTest {


 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s="aaa<bbbb>ssss<cccc>dddd<asdsa>sss";
  Matcher m = Pattern.compile("<(\\w+)>").matcher(s);
  while(m.find()){
  //System.out.println(m.start(1));
  //System.out.println(m.end(1));
  System.out.println(m.group(1));
  }
 }



这里是匹配bbbb cccc asdsa 
为什么System.out.println(m.group(1));改为System.out.println(m.group(2));
就出错
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 2

------解决方案--------------------
引用楼主 liyunxin 的帖子:

为什么System.out.println(m.group(1));改为System.out.println(m.group(2));


------解决方案--------------------
加上这一句
System.out.println(m.groupCount()); 

输出是1

就是说你的group(2)已经越界了~~
------解决方案--------------------
m.group()是一个得到的组合
------解决方案--------------------
你定几个捕获组,就能group调用几次
------解决方案--------------------
<(\\w+)>这个是group(0)
(\\w+) 这个是group(1)

再也没有了。 

------解决方案--------------------
这里分了两个组,所以你用2肯定会是数组越界
------解决方案--------------------
学习