把Java中的3种注释去掉。怎么做呀?例如:
/**
 * @author admin
 *
 */
public class Test2 {
/*
 * @param args
 */
public void test() {
// TODO Auto-generated method stub
int aa = 0;//sdflj
}}

解决方案 »

  1.   

    如果只是这个功能的话,不需要正则。只要简单的文本处理就行了。
    建议用Python/*  ... ...   */     这个之间的不写
    //  ... ...   ‘\n’ 之间的不写而已
      

  2.   

    人家肯定是要做什么代码混淆或者发布什么的小工具了。
    我做过MFC的重构,和JS的代码format
      

  3.   

    to healer_kx(甘草(我很看好你哦~~~)) :
      如果用文本处理,那例如System.out.println("//");//sdf
    怎样处理呢?
      

  4.   

    如果不考虑其他的功能,
    你只要
    一个char一个char的读入。
    然后读的字符,看看当前的状态是写还是不写、
    当读入/的时候,就看下面的字符是不是*, 如果是, 就进入不写的状态了。//一直到\n结束不写的状态。这有点类似于实现正则表达式的过程。
    如果要是用正则的话,你得考虑非英文字符的问题了。
      

  5.   

    to healer_kx(甘草(我很看好你哦~~~)) :应该是正则表达式更方便吧?那样的话逻辑不用处理了.
    类似 s.replaceAll("(/\\*\\.*\\*/)|(//\\.*)","")(这个正则不行)这样就OK了.
    Java行不是很多,一次性放到一个字符串中是可以的.
      

  6.   

    你想,代码和注释中都会出现中文等非ASCII字符,这个Java的正则处理起来要多费心了。正则太慢了。处理全文的匹配不知道会如何。
      

  7.   

    恩,有道理.
    多谢healer_kx(甘草(我很看好你哦~~~))启发.
    那我这样试试.
      

  8.   

    import java.util.regex.Pattern;
    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;
    }}
      

  9.   

    to healer_kx你忘了考虑字符串里有//和/*的情况上面我写的代码,里面替换多行注释的代码有问题,我的正则式哪儿有问题?有谁帮忙看一下