2

我需要在一个字符串中找到所有多行注释并将它们替换为空格(如果注释在一行中)或替换为\n(如果注释在多行中)。例如:

int/* one line comment */a;

应改为:

int a;

和这个:

int/* 
more
than one
line comment*/a;

应改为:

int
a;

我有一个包含所有文本的字符串,我使用了这个命令:

file = file.replaceAll("(/\\*([^*]|(\\*+[^*/]))*\\*+/)"," ");

其中文件是字符串。

问题是它找到了所有多行注释,我想将它分成 2 种情况。我该怎么做?

4

1 回答 1

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 */"

被替换为

"         "
于 2012-05-14T09:32:20.597 回答