คุณไม่สามารถใช้\s
ใน Java เพื่อจับคู่พื้นที่สีขาวบนชุดอักขระดั้งเดิมของตัวเองได้เนื่องจาก Java ไม่สนับสนุนคุณสมบัติพื้นที่สีขาว Unicode แม้ว่าการทำเช่นนั้นจะต้องเป็นไปตามRL1.2 ของ UTS # 18อย่างเคร่งครัด! สิ่งที่มีไม่เป็นไปตามมาตรฐานอนิจจา
Unicode กำหนด 26 คะแนนเป็นรหัสที่\p{White_Space}
20 ของพวกเขาเป็นประเภทต่างๆของ\pZ
GeneralCategory = แยกและที่เหลืออีก 6 GeneralCategory \p{Cc}
= ควบคุม
พื้นที่สีขาวเป็นสถานที่ให้บริการที่ค่อนข้างมั่นคงและพื้นที่เดียวกันเหล่านั้นคงอยู่ตลอดไป ถึงกระนั้น Java ก็ไม่มีคุณสมบัติที่สอดคล้องกับ The Unicode Standard สำหรับสิ่งเหล่านี้ดังนั้นคุณต้องใช้รหัสเช่นนี้แทน:
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
ไฟล์.
ขอโทษ 'การแข่งขันทั้งหมดนั้น regexes ของ Java ทำงานได้ไม่ดีนักกับชุดอักขระดั้งเดิมของตัวเองดังนั้นคุณต้องกระโดดผ่านห่วงที่แปลกใหม่เพื่อให้ทำงานได้
และถ้าคุณคิดว่าพื้นที่สีขาวไม่ดีคุณจะเห็นสิ่งที่คุณต้องทำเพื่อให้ได้\w
และ\b
ในที่สุดก็ประพฤติอย่างถูกต้อง!
ใช่มันเป็นไปได้และใช่มันเป็นเรื่องยุ่งเหยิง นั่นคือการกุศลแม้ วิธีที่ง่ายที่สุดในการรับไลบรารี regex ที่สอดคล้องกับมาตรฐานสำหรับ Java คือการ JNI ไปยังสิ่งของของ ICU นั่นคือสิ่งที่ Google ทำสำหรับ Android เพราะ OraSun ไม่สามารถวัดได้
หากคุณไม่ต้องการทำเช่นนั้น แต่ยังต้องการยึดติดกับ Java ฉันมีไลบรารีการเขียน regex ส่วนหน้าที่ฉันเขียนว่า "แก้ไข" รูปแบบของ Java อย่างน้อยก็เพื่อให้เป็นไปตามข้อกำหนดของRL1.2a ใน UTS # 18 Unicode นิพจน์ปกติ