如何在kotlin中拆分unicode空格

如何在kotlin中拆分unicode空格,kotlin,unicode,Kotlin,Unicode,在Kotlin,如果我们使用: string.split(Regex("\\s+")) 然后我们可以将一个字符串拆分为用空格分隔的单词。但是字符串: val string = "a\u2000b" 由于正则表达式与unicode空白字符不匹配,因此未拆分 有没有办法拆分所有空白字符上的字符串?我使用了以下正则表达式来匹配Unicode空白: Regex("[\\p{javaWhitespace}\u00A0\u2007\u202F]+") 这是因为\s只匹配拉丁-1空格,而\p{javaW

在Kotlin,如果我们使用:

string.split(Regex("\\s+"))
然后我们可以将一个字符串拆分为用空格分隔的单词。但是字符串:

val string = "a\u2000b"
由于正则表达式与unicode空白字符不匹配,因此未拆分


有没有办法拆分所有空白字符上的字符串?

我使用了以下正则表达式来匹配Unicode空白:

Regex("[\\p{javaWhitespace}\u00A0\u2007\u202F]+")
这是因为\s只匹配拉丁-1空格,而\p{javaWhitespace}匹配Character.isWhitespace为true的所有字符。出于某种原因,这不包括我单独列出的几个特定字符

有关详细信息,请参阅文档

相关事实:虽然不会删除非打断空格或图形空格,但会删除

由于Java 7允许指定-标志,该标志基本上也适用于您当前的问题:

Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS)
不幸的是,Kotlins尚未通过直接支持此功能。有一个:


您很可能需要Java7+才能真正工作。替代方法可以是使用其他预定义的字符类。但是,您需要为您的Java版本查找适当的模式javadoc,以确保它实际工作,或者以试错的方式执行;-

您可能想看一下icu4j,特别是:BreakIterator.getCharacterInstance挂起一秒,实际上,这是不正确的,因为\u2000b实际上被解释为\u2000+b,它是后跟字母“b”的“EN QUAD”空格字符。我已将问题还原为其原始形式,因为这正是我的意图。啊,是的,在Java/Kotlin中,您可能需要将U+2000B表示为代理项对……无论如何,我已经编辑了我的答案,以删除不相关的内容,所以我们现在只是让其他人感到困惑:-
string.split("""(?U)\s+""".toRegex())