首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Kotlin源码直接使用Java String方法(split)?

如何从Kotlin源码直接使用Java String方法(split)?
EN

Stack Overflow用户
提问于 2017-08-01 04:33:20
回答 2查看 1.2K关注 0票数 3

分析一下,我的瓶颈似乎是Kotlin kotlin.CharSequence.split()扩展函数。

我的代码如下所示:

代码语言:javascript
复制
val delimiter = '\t'
val line = "example\tline"
val parts = line.split(delimiter)

正如您可能注意到的,parts是一个List<String>

我想直接使用Java的split进行基准测试,它返回一个String[],可能会更有效。

如何从Kotlin源码直接调用Java的String::split(String)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-01 04:44:41

您可以将kotlin.String转换为java.lang.String,然后使用java.lang.String#split,因为kotlin.String将对java.lang.String执行mapped操作,但您将收到警告。例如:

代码语言:javascript
复制
//                               v--- PLATFORM_CLASS_MAPPED_TO_KOTLIN warnings
val parts: Array<String> = (line as java.lang.String).split("\t")

你也可以使用java.util.regex.Pattern#split,因为@Renato表示,在某些情况下,它会比java.lang.String#split慢。例如:

代码语言:javascript
复制
val parts: Array<String> = Pattern.compile("\t").split(line, 0)

但是要小心,kotlin.String#split的行为与java.lang.String#split是不同的,例如:

代码语言:javascript
复制
val line: String = "example\tline\t"

//   v--- ["example", "line"]
val parts1: Array<String> = Pattern.compile("\t").split(line, 0)

//   v--- ["example", "line", ""]
val parts2 = line.split("\t".toRegex())
票数 5
EN

Stack Overflow用户

发布于 2017-08-01 04:46:21

您可以这样做:

代码语言:javascript
复制
(line as java.lang.String).split(delimiter)

但不建议不使用kotlin.String,因为编译器可能会告诉您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45424811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档