2

こんにちは私は複数行の文字列の間/*および文字列内のすべてのコードを削除しようとしています。*/私はこれまでにこれを持っています:

Scanner scan = new Scanner(inputFile).useDelimiter("\\Z");
String file = scan.next();
String next = file.replaceAll("((/\\*)(\\s|\\S)*(\\*/))", "");

ただし、複数のケースがある入力ファイルでこれを実行しようとすると、/*それら*/の間のすべてが削除されます。たとえば、この入力では

/* first comment */
a = b;
//test
if a = c;
// whatever
if a = d;
/* this
is a

test
*/

/* another */

ファイルの最後の最初/*と最後の間のすべてを削除*/します。基本的に、テキスト全体を空白スペースに置き換えます。/**との最初のケースに制限するにはどうすればよい**/ですか?

4

1 に答える 1

3

greedy数量詞を使用しています。(\\s|\\S)*最後のパターンが見つかるまで、完全なパターンの結果が正常に一致するまで、すべてが一致*/します。

?後を追加することで、数量詞を気が進まないようにすることができます*

"((/\\*)(\\s|\\S)*?(\\*/))"

また、次のように正規表現を簡略化できます。-

String next = file.replaceAll("(?s)/\\*.*?\\*/", "");

(?s)->SingleLineマッチングに使用されます。Pattern.DOTALLで使用するための代替手段ですString.replaceAll()。したがって、dot(.)改行を含むすべてが含まれます。そして、あなたはそれを必要としません(\\s|\\S)

于 2012-11-08T07:17:14.840 に答える