3

我想做一个获取字符串的函数,如果它有内联注释,它会删除它。

public class sample {

    public static void main(String[] args) {
        String code = "/**THIS IS SAMPLE CODE */ public class TestFormatter{public static void main(String[] args){int i =2; String s= \"name\";\\u give give change the values System.out.println(\"Hello World\");//sample}}";

        CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(null);

        TextEdit textEdit = codeFormatter.format(
                CodeFormatter.K_COMPILATION_UNIT, code1, 0, code1.length(), 0,
                null);
        IDocument doc = new Document(code1);
        try {
            textEdit.apply(doc);
            System.out.println(doc.get());
        } catch (MalformedTreeException e) {
            e.printStackTrace();
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}

我在textEdit.apply(doc). 这是因为它不接受评论。

您能告诉我从字符串中删除注释的最佳方法是什么吗?(请不要建议太高级的解决方案)。

4

2 回答 2

1

尝试

replaceAll("(?s)/\\*.*?\\*/", "")

例子:

String code = "/**THIS IS SAMPLE CODE */ public class TestFormatter{public static void main(String[] args){int i =2; String s= \"name\";\\\\u give give change the values System.out.println(\"Hello World\");//sample}}";
System.out.println(code.replaceAll("(?s)/\\*.*?\\*/", ""));

输出:

public class TestFormatter{public static void main(String[] args){int i =2; String s= "name";\\u give give change the values System.out.println("Hello World");//sample}}

PS。

如果您还想删除最后的评论//sample}}

然后使用split()

System.out.println(code.replaceAll("(?s)/\\*.*?\\*/", "").split("//")[0]);
// keep in Mind it will also Remove  }} from //sample}} 

输出:

 public class TestFormatter{public static void main(String[] args){int i =2; String s= "name";\u give give change the values System.out.println("Hello World");
于 2013-09-19T05:22:40.330 回答
1
replaceAll("((/\\*)[^/]+(\\*/))|(//.*)", "")

这将删除单行、多行或文档注释。

与 JavaScript 兼容的正则表达式是((/\*)[^/]+(\*/))|(//.*),您可以在 regexpal.com 上尝试。

于 2013-09-19T05:41:53.140 回答