JAVA,将java文件中的单行和多行注释内容替换为空,正则表达式如何实现!

2024-11-27 12:35:50
推荐回答(3个)
回答1:

我们知道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); //打印结果

回答2:

这种东东写起来还真头疼~~~还以为不行(不足的是还没考虑到代码里要是有什么变量包含了 // /* */之类的符号的话..会转换错了..)
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);
}

回答3:

这个不会