Java replaceAll - 将“/**”替换为“”

Java replaceAll - Replace "/**" with ""

我目前正在使用一些 Java 代码进行评论分析,需要执行以下操作:

comment = comment.replaceAll("/**", "");

但是我遇到了这个异常:

    Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2
/**
  ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at commentCoupler.coupler.commentCriteriaForfilled(coupler.java:234)
    at commentCoupler.coupler.analyze(coupler.java:64)
    at commentCoupler.coupler.recursiveCoupler(coupler.java:27)
    at commentCoupler.coupler.recursiveCoupler(coupler.java:22)
    at commentCoupler.coupler.recursiveCoupler(coupler.java:22)
    at commentCoupler.main.main(main.java:16)

编辑:我做的时候也出现异常

comment = comment.replaceAll("**/", "");

comment = comment.replaceAll("*/", "");

有人知道为什么会发生这种情况吗?有人有解决方法吗?

replaceAll 采用正则表达式,而 /** 不是有效的正则表达式。

如果您只想删除 /**,请改用 replace

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

"replaceAll"的第一个参数是一个正则表达式,字符“*”在正则表达式中有特殊含义。

你可以这样使用:

String a = "/**hola mundo/**, adios mundo";
String output = a.replaceAll("/\*\*", "");
System.out.println(output); // --> "hola mundo, adios mundo"

这段代码有两处错误:

comment = comment.replaceAll("/**", "");
  1. * 是一个特殊的正则表达式字符,用于匹配任意数量的任何字符,基于您要删除要匹配文字 * 的注释的上下文,因此您需要正则表达式/\*\*.
  2. 因为这个正则表达式在 java 字符串中,它会尝试将 \* 读取为转义码(例如 \n 是换行符),但 \* 不是'语气。它需要改为 \*,这意味着字符串应该是 /\*\*

这是正确的。

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

顺便说一句,即使 \* 是一个有效的转义码,它被替换的东西也会被传递到正则表达式中,而不是 \*。 (例如,如果您将 \n 放在换行符中,则字符将进入正则表达式,而不是反斜杠和小写字母 n。


虽然你可能想要这样的东西

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

这将删除 /* <stuff> */。除了删除整个评论之外,这还会捕获文档评论 and 常规多行评论。不过,这取决于您如何阅读字符串。