\s
Javaは、独自のネイティブ文字セットの空白と一致させるために使用できません。これは、JavaがUnicodeの空白のプロパティをサポートしていないためです。 それが持っているものは、残念ながら標準に準拠していません。
Unicodeは26のコードポイントを次のように定義しています。\p{White_Space}
そのうちの20はさまざまな種類の\pZ
GeneralCategory = Separatorで、残りの6つは\p{Cc}
GeneralCategory = Controlです。
ホワイトスペースはかなり安定した特性であり、それらと同じものが実質的に永遠に存在しています。それでも、JavaにはこれらのUnicode標準に準拠するプロパティがないため、代わりに次のようなコードを使用する必要があります。
String whitespace_chars = "" /* dummy empty string for homogeneity */
+ "\\u0009" // CHARACTER TABULATION
+ "\\u000A" // LINE FEED (LF)
+ "\\u000B" // LINE TABULATION
+ "\\u000C" // FORM FEED (FF)
+ "\\u000D" // CARRIAGE RETURN (CR)
+ "\\u0020" // SPACE
+ "\\u0085" // NEXT LINE (NEL)
+ "\\u00A0" // NO-BREAK SPACE
+ "\\u1680" // OGHAM SPACE MARK
+ "\\u180E" // MONGOLIAN VOWEL SEPARATOR
+ "\\u2000" // EN QUAD
+ "\\u2001" // EM QUAD
+ "\\u2002" // EN SPACE
+ "\\u2003" // EM SPACE
+ "\\u2004" // THREE-PER-EM SPACE
+ "\\u2005" // FOUR-PER-EM SPACE
+ "\\u2006" // SIX-PER-EM SPACE
+ "\\u2007" // FIGURE SPACE
+ "\\u2008" // PUNCTUATION SPACE
+ "\\u2009" // THIN SPACE
+ "\\u200A" // HAIR SPACE
+ "\\u2028" // LINE SEPARATOR
+ "\\u2029" // PARAGRAPH SEPARATOR
+ "\\u202F" // NARROW NO-BREAK SPACE
+ "\\u205F" // MEDIUM MATHEMATICAL SPACE
+ "\\u3000" // IDEOGRAPHIC SPACE
;
/* A \s that actually works for Java’s native character set: Unicode */
String whitespace_charclass = "[" + whitespace_chars + "]";
/* A \S that actually works for Java’s native character set: Unicode */
String not_whitespace_charclass = "[^" + whitespace_chars + "]";
これでwhitespace_charclass + "+"
、のパターンとして使用できますreplaceAll
。
申し訳ありませんが、そのすべて。Javaの正規表現は、それ自体のネイティブ文字セットではうまく機能しないため、エキゾチックなフープを飛び越えて機能させる必要があります。
あなたは空白が悪いだと思うなら、あなたはあなたが得るために何をすべきか見るべきである\w
と\b
最終的には、適切に動作するように!
はい、それは可能です、そしてはい、それは非常に厄介な混乱です。それも慈善活動です。Javaの標準準拠の正規表現ライブラリを取得する最も簡単な方法は、JNIをICUのものに置き換えることです。OraSunは対応していません。
あなたがそれをしたくないがそれでもJavaを使いたい場合は、少なくともUTSのRL1.2aの要件に準拠させるためにJavaのパターンを「修正」するために書いたフロントエンドの正規表現書き換えライブラリがあります#18、Unicode正規表現。