Kotlin与Java的String.split方法对相同正则处理结果为何不一致
二者split方法确实存在设计差异,具体原因如下:
- Java的
String.split()方法传入的字符串参数默认会被解析为正则表达式,你写的"(\\[)|(\\])"可以正常匹配[或者]作为分隔符,所以分割后得到["date", "gt"]的预期结果。 - Kotlin的
split方法做了重载区分:直接传入字符串参数时,会把参数当作普通字面量匹配分割,不会解析正则规则。你的正则字符串作为普通文本在date[gt]中匹配不到任何内容,所以分割结果就是仅包含原字符串的数组。
Kotlin环境下的正确实现写法:
如果要使用正则规则分割,需要先将字符串转为Regex类型,代码如下:
val str = "date[gt]" val result = str.split("(\\[)|(\\])".toRegex()) // 执行后result值为 ["date", "gt"]
你也可以用更简洁的正则写法"[\\[\\]]".toRegex(),效果完全一致。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

