【原创】Copy源文件,并去掉注释

类别:Java 点击:0 评论:0 推荐:

/**  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

本文地址:http://com.8s8s.com/it/it10388.htm