如何直接从Kotlin源使用Java String方法(拆分)?

时间:2017-07-31 20:33:20

标签: kotlin

进行一些分析,似乎我的瓶颈是Kotlin kotlin.CharSequence.split()扩展功能。

我的代码就是这样的:

val delimiter = '\t'
val line = "example\tline"
val parts = line.split(delimiter)

您可能会注意到,partsList<String>

我想直接使用Java split进行基准测试,返回String[]并且效率更高。

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

2 个答案:

答案 0 :(得分:4)

您可以将kotlin.String投射到java.lang.String然后使用java.lang.String#split,因为kotlin.String将是mappedjava.lang.String,但是你&# 39;我会收到警告。例如:

//                               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。例如:

val parts: Array<String> = Pattern.compile("\t").split(line, 0)

但请注意,kotlin.String#split的行为与java.lang.String#split不同,例如:

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())

答案 1 :(得分:2)

你可以这样做:

(line as java.lang.String).split(delimiter)

但不建议不要使用编译器可能告诉你的kotlin.String