分析一下,我的瓶颈似乎是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)?
发布于 2017-08-01 04:44:41
您可以将kotlin.String转换为java.lang.String,然后使用java.lang.String#split,因为kotlin.String将对java.lang.String执行mapped操作,但您将收到警告。例如:
// 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())发布于 2017-08-01 04:46:21
您可以这样做:
(line as java.lang.String).split(delimiter)但不建议不使用kotlin.String,因为编译器可能会告诉您。
https://stackoverflow.com/questions/45424811
复制相似问题