我需要在字符串中找到所有多行注释,并用空格(如果注释在一行中)或用\n
替换它们(如果注释在多行上)。
例如:
int/* one line comment */a;
应更改为:
int a;
和此:
int/*
more
than one
line comment*/a;
应更改为:
int
a;
我有一个包含所有文本的字符串,我使用了这个命令:
file = file.replaceAll("(/\\*([^*]|(\\*+[^*/]))*\\*+/)"," ");
其中file是字符串。
问题是它找到所有多行注释,我想将它分成2个案例。 我该怎么办?
答案 0 :(得分:0)
这可以使用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 */"
替换为
" "