做一些分析,我的瓶颈似乎是 Kotlinkotlin.CharSequence.split()扩展功能。
我的代码只是做这样的事情:
val delimiter = '\t'
val line = "example\tline"
val parts = line.split(delimiter)
Run Code Online (Sandbox Code Playgroud)
您可能会注意到,parts是一个List<String>.
我想split直接使用 Java 进行基准测试,它返回 aString[]并且可能更有效。
如何String::split(String)直接从 Kotlin 源代码调用 Java ?
您可以将 a 转换kotlin.String为 ajava.lang.String然后使用java.lang.String#split因为kotlin.String将被映射到java.lang.String,但您会收到警告。例如:
// v--- PLATFORM_CLASS_MAPPED_TO_KOTLIN warnings
val parts: Array<String> = (line as java.lang.String).split("\t")
Run Code Online (Sandbox Code Playgroud)
您也可以使用java.util.regex.Pattern#split代替,因为@Renato 提到它会比java.lang.String#split在某些情况下更慢。例如:
val parts: Array<String> = Pattern.compile("\t").split(line, 0)
Run Code Online (Sandbox Code Playgroud)
但要小心,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())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |