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("/**", "");
*
是一个特殊的正则表达式字符,用于匹配任意数量的任何字符,基于您要删除要匹配文字 *
的注释的上下文,因此您需要正则表达式/\*\*
.
- 因为这个正则表达式在 java 字符串中,它会尝试将
\*
读取为转义码(例如 \n
是换行符),但 \*
不是'语气。它需要改为 \*
,这意味着字符串应该是 /\*\*
这是正确的。
comment = comment.replaceAll("/\*\*", "");
顺便说一句,即使 \*
是一个有效的转义码,它被替换的东西也会被传递到正则表达式中,而不是 \*
。 (例如,如果您将 \n
放在换行符中,则字符将进入正则表达式,而不是反斜杠和小写字母 n。
虽然你可能想要这样的东西
comment = comment.replaceAll("/\**\*/", "");
这将删除 /* <stuff> */
。除了删除整个评论之外,这还会捕获文档评论 and 常规多行评论。不过,这取决于您如何阅读字符串。
我目前正在使用一些 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("/**", "");
*
是一个特殊的正则表达式字符,用于匹配任意数量的任何字符,基于您要删除要匹配文字*
的注释的上下文,因此您需要正则表达式/\*\*
.- 因为这个正则表达式在 java 字符串中,它会尝试将
\*
读取为转义码(例如\n
是换行符),但\*
不是'语气。它需要改为\*
,这意味着字符串应该是/\*\*
这是正确的。
comment = comment.replaceAll("/\*\*", "");
顺便说一句,即使 \*
是一个有效的转义码,它被替换的东西也会被传递到正则表达式中,而不是 \*
。 (例如,如果您将 \n
放在换行符中,则字符将进入正则表达式,而不是反斜杠和小写字母 n。
虽然你可能想要这样的东西
comment = comment.replaceAll("/\**\*/", "");
这将删除 /* <stuff> */
。除了删除整个评论之外,这还会捕获文档评论 and 常规多行评论。不过,这取决于您如何阅读字符串。