3

replaceAll2 つの領域を除いて、文字列内のすべての空白を削除するために使用しようとしています。

私の文字列が

AB CD #E     F# #GH   I# JK L   M

次に、次のように出力したい

ABCD#E     F##GH   I#IJKLM

現在、文字ABCD#EF##GH#IJKLMを区別せずに出力しています。#replaceAll の正規表現でそれを行う方法はありますか?

String s1 = "AB CD #E     F# #GH   I# JK L   M";
s1 = s1.replaceAll("\\s+", "");
System.out.println(s1);
4

3 に答える 3

3

でこの正の先読みベースの正規表現を探していますreplaceAll:

String repl = str.replaceAll("\\s+(?=(?:(?:[^#]*#){2})*[^#]*$)", "");

ライブデモ: http://ideone.com/nFQhVt

説明:([^#]*"){2}この正規表現は、ハッシュ (#) が見つかるまで、つまりスペースのすべての一致の右側 (RHS) で、基本的にテキストのペアの 0 回以上の出現に一致する正の先読みを使用しています。

[^#]*#簡単に言えば、スペースがハッシュ記号のペアの外側にある場合にのみスペースを置き換えることを意味します。これは、ハッシュ内のすべての一致が RHSで奇数の一致を持つためです。

于 2013-04-16T14:12:33.687 に答える