UTS # 18의 RL1.2\s
를 충족하기 위해 반드시 필요한 경우에도 Java에서 고유 문자 집합의 공백을 일치시키기 위해 Java를 사용할 수 없습니다. Java는 유니 코드 공백 속성을 지원하지 않기 때문입니다 . 안타깝게도 표준을 준수하지 않습니다.
유니 코드는 26 개의 코드 포인트를 \p{White_Space}
다음 과 같이 정의합니다 . 그 중 20 개는 다양한 종류의 \pZ
GeneralCategory = Separator 이고 나머지 6 개는 \p{Cc}
GeneralCategory = Control 입니다.
공백은 매우 안정적인 속성이며 동일한 속성은 거의 영원히 존재했습니다. 그럼에도 불구하고 Java에는 이들에 대한 유니 코드 표준을 준수하는 속성이 없으므로 대신 다음과 같은 코드를 사용해야합니다.
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 용 정규식 라이브러리를 얻는 가장 쉬운 방법은 ICU에 JNI를 사용하는 것입니다. OraSun은 측정하지 않기 때문에 Google이 Android에서하는 일입니다.
그렇게하고 싶지 않지만 여전히 Java를 고수하고 싶다면, 최소한 UTS 의 RL1.2a 요구 사항을 준수하기 위해 Java의 패턴을 "수정"하는 프런트 엔드 정규식 재 작성 라이브러리가 있습니다. # 18, 유니 코드 정규식 .