如何直接从Kotlin源代码使用Java字符串方法(split)?
在进行一些分析时,我的瓶颈似乎是Kotlin如何直接从Kotlin源代码使用Java字符串方法(split)?,kotlin,Kotlin,在进行一些分析时,我的瓶颈似乎是KotlinKotlin.CharSequence.split()扩展函数 我的代码就是这样做的: val delimiter = '\t' val line = "example\tline" val parts = line.split(delimiter) 正如您可能注意到的,部分是一个列表 我想直接使用Java的split进行基准测试,它返回一个String[],可能更有效 如何直接从Kotlin源代码调用Java的String::split(Strin
Kotlin.CharSequence.split()
扩展函数
我的代码就是这样做的:
val delimiter = '\t'
val line = "example\tline"
val parts = line.split(delimiter)
正如您可能注意到的,部分
是一个列表
我想直接使用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<String> = (line as java.lang.String).split("\t")
val parts: Array<String> = Pattern.compile("\t").split(line, 0)
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())
但是要小心,kotlin.String#split
的行为与java.lang.String#split
不同,例如:
// v--- PLATFORM_CLASS_MAPPED_TO_KOTLIN warnings
val parts: Array<String> = (line as java.lang.String).split("\t")
val parts: Array<String> = Pattern.compile("\t").split(line, 0)
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())
val-line:String=“example\tline\t”
//v---[“示例”,“行”]
val parts1:Array=Pattern.compile(“\t”).split(第0行)
//v---[“示例”、“行”、“行”]
val parts2=line.split(“\t”.toRegex())
您可以执行以下操作:
(line as java.lang.String).split(delimiter)
但编译器可能会告诉您,不建议使用
kotlin.String
。谢谢,这很有帮助!如果有人使用它,您可以使用@suppress(“PLATFORM\u CLASS\u MAPPED\u TO\u KOTLIN”)
来抑制警告,以防有人想知道:如果您使用它数百万次,Java split比KOTLIN快得多(我拆分了一百万行,在更改为Java split后,它的速度几乎是KOTLIN的两倍)。模式解决方案甚至比Kotlin的拆分慢得多。这不是离题。你这样做的唯一原因是为了性能,所以知道这样做会有回报是件好事。@Renato我承认Pattern#split
是一种可选的方法,我会修正我的答案。谢谢您的反馈,先生。现在怎么样?