2

文字列内のすべての複数行のコメントを見つけて、スペース(コメントが1行の\n場合)または(コメントが複数行の場合)に置き換える必要があります。例えば:

int/* one line comment */a;

次のように変更する必要があります:

int a;

この:

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

次のように変更する必要があります:

int
a;

すべてのテキストを含む1つの文字列があり、次のコマンドを使用しました。

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

ここで、fileは文字列です。

問題は、すべての複数行のコメントが見つかることであり、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 に答える