我们知道java中有三种注释方式
1. // 单行
2. /* .......*/ 单行 或多行
3. /** .......*/ 单行 或多行
我们的目的就是把以上世哪悄三种特征的注释替换
以下是例子
String s = “。缓启。。。。。。。”; // 将文件的内容赋值给s
Pattern pattern1 = Pattern.compile("//(.*)"); //特征是所有以双斜线开头的
Matcher matcher1 = pattern1.matcher(s);
s = matcher1.replaceAll(""); //替换第一种注释
Pattern pattern2 = Pattern.compile("/\\*(.*?)\\*/", Pattern.DOTALL); //特征是以/*开始,以*/结尾,Pattern.DOTALL的意思是糊涂模式,这种模式下.(点号)匹配所有字符
Matcher matcher2 = pattern2.matcher(s);
s = matcher2.replaceAll(""); //替换第二种注释
Pattern pattern3 = Pattern.compile("/\\*\\*(.*?)\\搜渣*/", Pattern.DOTALL); //特征是以/**开始,以*/结尾
Matcher matcher3 = pattern3.matcher(s);
s = matcher3.replaceAll(""); //替换第三种注释
System.out.println(s); //打印结果
这种东东写起来还真头疼~~~还以为不行(不足的是还没考虑到代码里要是有什么变量包含了 // /* */之类的符号的话..会转换错了..)
public static void main(String[] args) throws Exception
{
FileInputStream fis=new FileInputStream("E:\\workspace\\bus_mod\\src\\test\\Unique.java");
int len=0;
byte[] b=new byte[190];
String res="";
while((len=fis.read(b))!=-1){
res+=new String(b,0,len);
}
fis.close();
res=res.replaceAll("(/[*]|[*]/)", "______________"); //替换整段注释的符号,*号本身比较不好处理
res=res.replaceAll("\r\n", "\n"); //替换回车换行,统一处理..需要可蚂则以再换回去
res=res.replaceAll("(//)(.*)(\n)", "\n");//把单行注释替换为空
res=res.replaceAll("\n", "@@@@@@@@@@@@@@@"); //先把换行符替换掉,和*号一样,特殊字符不好处理,先替换
res=res.replaceAll("(______________)((.)*?)(______________)", ""); //多行的注释替换为空
res=res.replaceAll("@@@@@@@@@@@@@@@", "\n"); //换回换行符
res=res.replaceAll("(\t|\b|\f|\t)*\n", "\n"); //去掉空行里的空字符,制表符,空格等
res=res.replaceAll("\n{2,}", "\n"); //唤物困去和念掉空行
System.out.println(res);
}
这个不会