import java.io.*;
import java.util.regex.*;
public class updataPage { public static void main(String[] args) {

try{
File dir=new File("C:/jsptest/test/WebRoot/08");
String file[]=dir.list();
//for(int i=0;i<file.length;i++){
int i=1;
File f=new File("C:/jsptest/test/WebRoot/08/"+file[i]);
//if(f.isDirectory())continue;
FileInputStream fis=new FileInputStream(f);
//BufferedInputStream bis=new BufferedInputStream(fis);
String str2="";
byte[] b=new byte[1024];

int j=0;
while((fis.read(b))!=-1){
j++;
String s=new String(b,"UTF-8");
str2=str2+s;
b=new byte[1024];
}
System.out.println(file[i]+" "+j);
fis.close();
Pattern regex=Pattern.compile("request\\.getParameter\\(\"[a-zA-Z]+\"\\)");
Matcher m=regex.matcher(str2);
System.out.println("regex:"+regex.toString());
String[] strarr=new String[20];
int t=0;
while(m.find()){
strarr[t]=m.group();
t++;
}
t=0;
while(strarr[t]!=null){
String tempstr=strarr[t];
System.out.println(tempstr);
/*下面这行如果不注释的话系统会报t++;这一行错误,错误信息:
java.util.regex.PatternSyntaxException: Unclosed group near index 35
request\.getParameter\("("submit"\)^*/
//regex=Pattern.compile("request\\.getParameter\\(\""+tempstr.substring(20,tempstr.length()-2)+"\"\\)");
System.out.println(regex);
t++;
}

//String rall=m.replaceAll("class=\"fontstyle\"");
//System.out.println(rall);
//FileOutputStream fos=new FileOutputStream(new File("C:/test/"+file[i]));
//fos.write(rall.getBytes("UTF-8"));
//fos.close();
//System.out.println(file[i]);
//}

}catch(Exception e){
e.printStackTrace();
}
}}问题在代码中
//regex=Pattern.compile("request\\.getParameter\\(\""+tempstr.substring(20,tempstr.length()-2)+"\"\\)");
这行不注释运行就出错

解决方案 »

  1.   

    检查下:tempstr.substring(20,tempstr.length()-2) 所得到的字符串是否有特殊字符吧。
      

  2.   

    如果是特殊字符的错误,那么为什么是报t++;这个的错误呢?里面t++;这一句好像和//regex=Pattern.compile("request\\.getParameter\\(\""+tempstr.substring(20,tempstr.length()-2)+"\"\\)");
    没有关系。
      

  3.   

    确实是特殊字符的问题。异常都指出来了
    /*下面这行如果不注释的话系统会报t++;这一行错误,错误信息:                     java.util.regex.PatternSyntaxException: Unclosed group near index 35                     request\.getParameter\("("submit"\)^*/
    这里\("("submit"\)^*/这里多了一个没有转义的(
    所以才会报出正则表达式解析错误的
      

  4.   

    不是吧,看错行了吧?错误信息:
    java.util.regex.PatternSyntaxException: Unclosed group near index 35
                        request\.getParameter\("("submit"\)^*/说的很清楚,是PatternSyntaxException:模板语法错误啊;
    Unclosed group:没有关闭的组;
    错误的位置就在 最后面那个  submit  附近。