我怎样才能直接从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
因为编译器可能会告诉你。