把Java中的3种注释去掉。怎么做呀?例如:
/**
* @author admin
*
*/
public class Test2 {
/*
* @param args
*/
public void test() {
// TODO Auto-generated method stub
int aa = 0;//sdflj
}}
/**
* @author admin
*
*/
public class Test2 {
/*
* @param args
*/
public void test() {
// TODO Auto-generated method stub
int aa = 0;//sdflj
}}
建议用Python/* ... ... */ 这个之间的不写
// ... ... ‘\n’ 之间的不写而已
我做过MFC的重构,和JS的代码format
如果用文本处理,那例如System.out.println("//");//sdf
怎样处理呢?
你只要
一个char一个char的读入。
然后读的字符,看看当前的状态是写还是不写、
当读入/的时候,就看下面的字符是不是*, 如果是, 就进入不写的状态了。//一直到\n结束不写的状态。这有点类似于实现正则表达式的过程。
如果要是用正则的话,你得考虑非英文字符的问题了。
类似 s.replaceAll("(/\\*\\.*\\*/)|(//\\.*)","")(这个正则不行)这样就OK了.
Java行不是很多,一次性放到一个字符串中是可以的.
多谢healer_kx(甘草(我很看好你哦~~~))启发.
那我这样试试.
import java.util.regex.Matcher;
import java.util.ArrayList;
import java.util.List;class Test {
public static void main(String[] args) {
String code = getCode();
System.out.print(dealCode(code));
}
// 获得代码
public static String getCode(){
StringBuffer sb = new StringBuffer();
sb.append("/**\n");
sb.append(" * @author admin\n");
sb.append(" * \"falsestr1\"\n");
sb.append(" */\n");
sb.append("public class Test2 {\n");
sb.append(" /* \"falsestr2\"\n");
sb.append(" * @param args\n");
sb.append(" */\n");
sb.append(" public void test() {\n");
sb.append(" // TODO Auto-generated method stub \"falsestr3\"\n");
sb.append(" int aa = 0;//sdflj\n");
sb.append(" String bb = \"abcdefg//falsecmt1\";\n");
sb.append(" String cc = \"abcdefg/*falsecmt2*/\";\n");
sb.append(" }\n");
sb.append("\n");
sb.append("}\n");
return sb.toString();
} // 处理代码
public static String dealCode(String code){
String result = null;
// 保护字符串,把代码中的字符串都替换成{0}{1}等形式,并把字符串填入一个list中
StringBuffer codeReStr = new StringBuffer();
Matcher m = Pattern.compile("\".*\"").matcher(code);
List strList = new ArrayList();
for(int i=0;m.find();i++){
m.appendReplacement(codeReStr,"{" + i + "}");
strList.add(m.group());
}
m.appendTail(codeReStr); result = codeReStr.toString();
System.out.println(result); // 除去多行注释(这句现在不起作用,有谁知道为什么?)
result = result.replaceAll("/\\*[.\\r\\n]*\\*/","");
System.out.println(result); // 除去单行注释
result = result.replaceAll("//.*\\n","\n");
System.out.println(result); // 将保存的字符串填回去
for(int i=0;i<strList.size();i++){
result = result.replaceAll("\\{"+i+"\\}",(String)strList.get(i));
}
System.out.println(result); return result;
}}