如何在Kotlin中的Unicode空格上拆分

时间:2019-05-21 09:50:21

标签: kotlin unicode

在科特林,如果我们使用:

string.split(Regex("\\s+"))

然后,我们可以将字符串拆分为用空格分隔的单词。但是字符串:

val string = "a\u2000b"

由于正则表达式与unicode空格字符不匹配,因此不会拆分。

我有办法在所有空白字符上分割字符串吗?

2 个答案:

答案 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()会删除!