public void query(){
boolean t = false;
String str2 = jTextField.getText();
String str1 = jTextArea1.getText();
Pattern p = Pattern.compile(str2,Pattern.CASE_INSENSITIVE);  
Matcher m = p.matcher(str1);
t = m.find();
jTextField1.setText(Boolean.toString(t));   /// 这里返回TRUE

if(t){
for(i=0;i<m.groupCount();i++){                  
jTextArea.setText(m.group(i) + "\n"); //这里为什么不能输出呢 }                                              //把m.groupCount();改为20,或其他数,就可以输出了,这怎么回事呢??
}
}

解决方案 »

  1.   

    我觉得你的那个程序应该没错.既然把m.groupCount();改为20可以运行
    不改的话应该也可以运行.
      

  2.   

    你从JTextField输入的正则表达式,在前面跟后面放个括号试一下。
      

  3.   

    没有匹配的吧,打印出m.groupCount()看看有没有数据...
    如果t为真是不是groupCount为0.所以根本不执行for里面的
      

  4.   

    如果整个表达式没有加括号,那么group(0)表示的就是整个表达式
    如果把表达式用括号括起来。就多了个组,不仅仅只有第0组,还包括用括号括起来的第1组
      

  5.   

    而用m.groupCount()计算的结果是不包括group(0),也就是说,如果表达式没有括号,m.groupCount结果是0
    这就是加个括号的用处