这可以使用Matcher.appendReplacement
和来解决Matcher.appendTail
。
String file = "hello /* line 1 \n line 2 \n line 3 */"
+ "there /* line 4 */ world";
StringBuffer sb = new StringBuffer();
Matcher m = Pattern.compile("(?m)/\\*([^*]|(\\*+[^*/]))*\\*+/").matcher(file);
while (m.find()) {
// Find a comment
String toReplace = m.group();
// Figure out what to replace it with
String replacement = toReplace.contains("\n") ? "\n" : "";
// Perform the replacement.
m.appendReplacement(sb, replacement);
}
m.appendTail(sb);
System.out.println(sb);
输出:
hello
there world
注意:如果您想为所有不在注释中的文本保留正确的行号/列(如果您想在错误消息等中参考源代码,那很好)我建议您这样做
String replacement = toReplace.replaceAll("\\S", " ");
它将所有非空白替换为空白。这种方式\n
被保留,并且
"/* abc */"
被替换为
" "