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