4

「12 345 678」のような文字列があり、空白を削除したかった (int への変換のため)。だから私はいつものようにしました: myString.replaceAll("\\s", "");、しかし何という驚きでしょう! それは何もしませんでした、スペースはまだそこにありました。

さらに調べてみると、このスペース文字は Character.SPACE_SEPARATOR ( Character.getType(myString.charAt(<positionOfSpaceChar>))) 型であることがわかりました。

私が得られないのは、なぜこの忘却のスペース文字 (Unicode カテゴリ Zs http://www.fileformat.info/info/unicode/category/Zs/list.htmから) が空白として認識されないのかということです (でもCharacter.isWhitespace(char)) .

Java API を介して読み取ることは役に立ちません (これまでのところ)。

注: 最後に、その文字を削除したいだけです...そしておそらくそれを行う方法を見つけるでしょうが、なぜこのように動作するのかについての説明に本当に興味があります. ありがとう

4

1 に答える 1

9

あなたの問題は、それ\sが として定義されていることです[ \t\n\x0B\f\r]。使用したいのは です。\p{javaWhitespace}これは、真であるすべての文字として定義されていjava.lang.Character.isWhitespace()ます。

この場合に適用されるかどうかはわかりませんが、改行しないスペースは空白とは見なされないことに注意してください。 Character.SPACE_SEPARATORは通常空白ですが、'\u00A0'、'\u2007'、'\u202F' は改行しないため含まれません。非改行スペースを含める場合は、. に加えてこれらの 3 文字を明示的に含めます\p{javaWhitespace}。ちょっと痛いですが、そういうものです。

実際、に変換する特定のケースでは、次のことintをお勧めします。

myString.replaceAll("\\D", "");,

数字ではないものをすべて取り除きます。

于 2013-06-17T03:57:41.053 に答える