次の文字列があります。
See it now! .5..%..off your purchase!.Only today.
そうであってほしい
See it now! 5% off your purchase! Only today.
それは次のとおりです。
すべての特殊文字の後に 0 個以上のスペースと 1 個以上のピリオドが続くと、特殊文字とスペースに置き換えられます。数字とピリオド2つの場合はスペースのみに置換されます
どうすればいいですか?
\これを試して
String resultString = subjectString.replaceAll("\\B[ .]+", " ");
これは、単語以外の境界が前にある 1 つ以上のスペースまたはピリオドに一致します。これらは、単一のスペースに置き換えられます。
編集
修正された質問に基づいて:
String resultString = subjectString.replaceAll("\\B[ .]+|(\\d)\\.+", "$1 ");
数字の後に 1 つ以上のピリオドが続く場合にも一致します。ピリオドは単一のスペースに置き換えられます。
これはうまくいくはずです:
String resultString = subjectString.replaceAll(
"(?x) # verbose regex \n" +
"(\\p{P}) # Match and capture a punctuation character \n" +
"\\ * # Match zero or more spaces \n" +
"\\. # Match a dot", "$1 ");