我怎样才能直接从Kotlin源使用Java String方法(split)?

做一些分析,看来我的瓶颈是Kotlin kotlin.CharSequence.split()扩展函数。

我的代码只是做这样的事情:

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

你可能会注意到, parts是一个List

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

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

你可以将一个kotlin.String为一个java.lang.String然后使用java.lang.String#split因为kotlin.String将映射到java.lang.String ,但是会得到警告。 例如:

 // v--- PLATFORM_CLASS_MAPPED_TO_KOTLIN warnings val parts: Array = (line as java.lang.String).split("\t") 

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

 val parts: Array = 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 = Pattern.compile("\t").split(line, 0) // v--- ["example", "line", ""] val parts2 = line.split("\t".toRegex()) 

你可以这样做:

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

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