だから私はこれに少し苦労しています。どこかから文字列を引っ張っているときは、すべての文字の間にスペースを追加することにしました。
次の正規表現が必要です。
- スペースのない単一のスペースを置き換える
- トリプルスペースを1スペースに置き換えます(追加されたスペースに
" "
変わるため)。" "
誰かがこの正規表現を手伝ってもらえますか?単一/複数のスペースに対してこれを行う方法は知っていますが、x個のスペースを1つのスペースに変換することはできません。
少し注意が必要ですが、ここに単一の正規表現ソリューションがあります。
// becomes "test string"
"t e s t s t r i n g".replaceAll("( ) | ", "$1");
例: http: //ideone.com/O6DSk
これが機能するのは、トリプルスペースが一致した場合、スペースの1つがキャプチャグループ1に保存されますが、シングルスペースが一致した場合、キャプチャグループ1は空になるためです。一致をグループのコンテンツに置き換えると、3つのスペースが1つになり、1つのスペースが削除されます。
s = s.replaceAll("\\s{3}", " "); // Replace 3 spaces with one.
私はあなたが理解していることを知っていると思います、スペースなしで単一のスペースを置き換えます。
{n}
n
スペースと完全に一致します。{0,n}
0からn個のスペースに一致します。{4,}
4つ以上のスペースに一致します。single space
スペースなしと1スペースの両方を置き換えるに3 spaces
は、以下の正規表現を使用できます。
s = "He llo World";
s = s.replaceAll("(\\S)\\s{1}(\\S)", "$1$2").replaceAll("\\s{3}", " ");
System.out.println(s);
Ouput:-
Hello World
ここで注文が重要です。なぜなら、2番目の正規表現で3 spaces
に変換されます。single space
最初のものの前に使用すると、最終的にはに置き換えられno-space
ます。
(\\S)\\s{1}(\\S)
->\\S
は、単一のスペースのみが置き換えられるようにするためのものです。\\S
非スペース文字を表します。お持ちでない場合は、すべてのスペース文字がスペースなしに置き換えられます。
スペースのない単一のスペースを置き換えます。トリプルスペースを1つのスペースに置き換えます。
それは正規表現の仕事ではありません。
結局のところ、正規表現の仕事です。
input.replaceAll("(?<=\S) (?=\S)", "").replaceAll(" {3,}", " ");
最初の正規表現は、前に非スペース(look-behind、(?<=\S)
)が続き、その後に非スペース(look-ahead (?=\S)
)が続くすべての単一スペースを置き換えます。
他の正規表現は、残りのトリプルスペース(またはそれ以上)を処理します。
replaceAll()
以下のような回避策を使用して、希望の組み合わせで簡単に使用できると思います。
//locate 3 spaces and mark them using some special chars
myString = myString.replaceAll(" ", "@@@"); //use some special combination
//replace single spaces with no spaces
myString = myString.replaceAll(" ", "");
//now replace marked 3 spaces with one space
myString = myString.replaceAll("@@@", " "); //use the same special combination