在科特林,如果我们使用:
string.split(Regex("\\s+"))
然后,我们可以将字符串拆分为用空格分隔的单词。但是字符串:
val string = "a\u2000b"
由于正则表达式与unicode空格字符不匹配,因此不会拆分。
我有办法在所有空白字符上分割字符串吗?
答案 0 :(得分:1)
由于Java 7 Pattern
可以指定UNICODE_CHARACTER_CLASS
-flag,因此基本上也可以解决当前问题:
Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS)
遗憾的是,Kotlins RegexOption
尚未直接通过Regex
支持此功能。有一个known issue that also describes a workaround (KT-21094):
string.split("""(?U)\s+""".toRegex())
您(很可能)需要Java 7+才能正常工作。替代方法可以是使用其他预定义的字符类。但是,您需要为您的Java版本查找适当的Pattern
-javadoc,以确保它确实有效(或以trial-error-manner ;-)的方式进行。
答案 1 :(得分:0)
我使用以下正则表达式来匹配Unicode空格:
Regex("[\\p{javaWhitespace}\u00A0\u2007\u202F]+")
之所以起作用,是因为尽管\s
仅匹配Latin-1空格,而\p{javaWhitespace}
匹配了Character.isWhitespace()
为真的所有内容。由于某些原因,其中不包括一些我单独列出的特殊字符。
Pattern文档中的更多信息。
相关事实:尽管java.lang.String.trim()不会删除不间断空格或图形空格,但是kotlin.String.trim()会删除!