进行一些分析,似乎我的瓶颈是Kotlin kotlin.CharSequence.split()
扩展功能。
我的代码就是这样的:
val delimiter = '\t'
val line = "example\tline"
val parts = line.split(delimiter)
您可能会注意到,parts
是List<String>
。
我想直接使用Java split
进行基准测试,返回String[]
并且效率更高。
如何直接从Kotlin来源调用Java String::split(String)
?
答案 0 :(得分:4)
您可以将kotlin.String
投射到java.lang.String
然后使用java.lang.String#split
,因为kotlin.String
将是mapped到java.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
。