有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何替换模式。使用字符串完成所有操作。替换所有函数?

我正在创建一个简单的项目,它是一个简单的IDE

我正在IDE中检测源代码(长字符串)的注释并将其删除

我尝试了许多正则表达式来检测注释,这个正则表达式对我检测注释的效果最为一致:

Pattern commentsSingle = Pattern.compile("\\/\\/.*");
Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);

我想修改此注释检测,以便能够使用String.replaceAll方法删除注释

我可以通过以下方式轻松完成单行评论:

code = code.replaceAll("\\/\\/.*", "");

但是,多行注释有一个Pattern.DOTALL,因此我无法使用该字符串。正确回复所有方法

有人能帮我修改正则表达式或调用另一个方法,这样我就可以正确地替换多行注释了吗

我尝试过的一些正则表达式:

("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)",""))

上述正则表达式有时会导致stackoverflow异常


共 (1) 个答案

  1. # 1 楼答案

    您可以使用来自^{}^{},而不是String.replaceAll,然后可以使用Pattern.DOTALL构建模式:

    看起来像这样:

    final Pattern pattern = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
    final Matcher matcher = pattern.matcher(comment);
    final String strWithoutComments = matcher.replaceAll("");
    

    下面是一个例子:

    final String code = "/**\n" + 
                        " * \n" + 
                        " * @param args\n" + 
                        " */\n" +
                        "public static void main(final String[] args) { }\n";
    final String codeWithoutComments = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL).matcher(code)
            .replaceAll("");
    System.out.println(code);
    System.out.println(codeWithoutComments);
    

    将在替换之前打印此内容:

    /**
     * 
     * @param args
     */
    public static void main(final String[] args) { }
    

    在替换之后:

    public static void main(final String[] args) { }