楼上的大侠们,评论下的太急了吧,其实滤去源码中的注释并不是一件很简单的事情。考虑这样一段代码:String s="i love java \\\\\"/* just for fun */ \\\"+"\"\\// funny2 \"\\\\"; // Real res here...请问滤去注释之后的结果应该是什么呢?这个问题需要有点文法分析的基础的。
String s="i love java \\\\\"/* just for fun */ \\\"+"\"\\// funny2 \"\\\\"; // Real res here... 编译不会通过的,如果你想做一个注释过滤器,注释的是通过编译的源文件还是没通过的?通过编译的注释很规范按照规范查找就可以了,如果是没通过的he he,难哪,比如说您的举例,编译都通不过,通过分析貌似:String s="i love java \\\\\"/* just for fun */ \\\"+"\"\ (// funny2 \"\\\\"; // Real res here...)--注释语句 剔除/* */ 您这个语句就不知道是啥东东了。 String s="i love java \\\\\" \\\"+"\"\\
多打了一个\,所以通过不了您试试这个能不能通过?String s="i love java \\\\\"/* just for fun */ \\"+"\"\\// funny2 \"\\\\"; // Real res here...请问楼上的,注释应该怎么滤掉?
String s="i love java \\\\\"/* just for fun */ \\\"+"\"\\// funny2 \"\\\\"; // Real res here...
编译不会通过的,如果你想做一个注释过滤器,注释的是通过编译的源文件还是没通过的?通过编译的注释很规范按照规范查找就可以了,如果是没通过的he he,难哪,比如说您的举例,编译都通不过,通过分析貌似:String s="i love java \\\\\"/* just for fun */ \\\"+"\"\
(// funny2 \"\\\\"; // Real res here...)--注释语句
剔除/* */ 您这个语句就不知道是啥东东了。
String s="i love java \\\\\" \\\"+"\"\\
我还是别学java了
final boolean IN=true;
final boolean OUT=false;
boolean quote=OUT,block=OUT,line=OUT,slash=OUT;
public void printDecommentSource(File f){
if(f==null)
return;
byte[] b=new byte[1];
byte lastByte='\0';
String s="";
FileInputStream fis;
try{
fis=new FileInputStream(f);
while(fis.read(b)!=-1){
if(b[0]=='"'&&lastByte=='\\'&&!slash)
quote=!quote;
if(b[0]=='*'&&lastByte=='/'&&!quote&&!block){
block=IN;
s=s.substring(0,s.length()-1);
}
if(b[0]=='/'&&lastByte=='*'&&!quote&&block){
block=OUT;
}
if(b[0]=='/'&&lastByte=='/'&&!quote&&!line){
line=IN;
s=s.substring(0,s.length()-1);
}
if(b[0]=='\n'){
System.out.print(s);
s="";
if(!quote&&line)
line=OUT;
}
if(slash)
slash=OUT;
else if(b[0]=='\\'&"e)
slash=IN;
if(!block&&!line&&!(b[0]=='/'&&lastByte=='*'))
s+=(char)b[0];
lastByte=b[0];
}
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}public class TestDecomment {
public static void main(String[] args){
if(args.length!=1){
System.err.println("Usage : java TestDecomment FileName");
System.exit(-1);
}
File f=new File(args[0]);
Decomment dc=new Decomment();
dc.printDecommentSource(f);
}
}