/**  DelComment.java  *  *   Copy this file to Copy.java,   *   and get rid of the comments.  *  *  Author:李文雄。033534026  *  Class :电子政务  *  *   Time:04-08-2005  *  *  可以把一些//和/*嵌套的注释也能够去掉,  *   另外也可以区别出那些是字符串的字符,而不是注释。  *   完成的功能比较好  *  */ package Class; import java.io.*; public class DelComment{    private static void outLine(BufferedWriter out,String line ,int n){    // Used to write to the outfile      String s = "第" + n + "行:";   line = s + line;   try{    out.write(line);    out.newLine();   }   catch(IOException e){    e.printStackTrace();   }    }  public static void main(String[] args){ //Main Function     int n = 0;   // note the line number      String line = ""; //Used to load the string   String temp = "";      int cmtIndex0 = -1;  //用来标记 字符串引号 "   int cmtIndex4 = -1;       int cmtIndex1 = -1;  //用来标记 注释符号 //    int cmtIndex2 = -1;  //用来标记 注释符号 /* */        boolean isCmt1 = false;  //用来标记 注释符号 //    boolean isCmt2 = false;  //用来标记 注释符号 /* */         try{    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("DelComment.java")));    //BufferedWriter out = new BufferedWriter(new FileWriter("copy.java"));    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("copy.java")));        while((temp = in.readLine()) != null){            cmtIndex2 = temp.indexOf("*/");            if((cmtIndex2 != -1) && isCmt2){       isCmt2 = false;       line = temp.substring(cmtIndex2+2);       n++;       outLine(out,line,n);       continue;      }            if(isCmt2) continue;            cmtIndex0  = temp.indexOf("\"");  //出现左引号"的位置            cmtIndex1 = temp.indexOf("//");       cmtIndex2 = temp.indexOf("/*");             cmtIndex4 = temp.indexOf("\"",cmtIndex0+1);  //出现右引号"的位置            if( !((cmtIndex0 < cmtIndex1)  &&   (cmtIndex1 < cmtIndex4))  ){        //  "//" 不是在两个引号之间              if(cmtIndex1 != -1){        if( (cmtIndex1 < cmtIndex2) || (cmtIndex2 == -1))          if(cmtIndex1 > 0){          line = temp.substring(0,cmtIndex1);          n++;          outLine(out,line,n);          continue;         }       }       }       if( !((cmtIndex0 < cmtIndex2)  &&   (cmtIndex2 < cmtIndex4))  ){          //  "/*" 不是在两个引号之间               if(cmtIndex2 != -1){        if(cmtIndex2 > 0){         line = temp.substring(0,cmtIndex2);         n++;         outLine(out,line,n);        }        isCmt2 = true;        continue;       }      }       n++;      outLine(out,temp,n);     }      in.close();     out.close();   }catch(EOFException e){} //catch the exception      catch(IOException e){    e.printStackTrace();    }      catch(Exception e){    e.printStackTrace();   }   //********* Those below just for test of "Get rid of comment"   String str1 = "//   This is just to test about (//)";   String str2 = "/*   This is just to test about (/*  */)  */";   System.out.println(str1);   System.out.println(str2);  } } ==>输出结果: http://blog.csdn.net/horisly/archive/2005/04/08/340159.aspx  
 
  |