Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何直接从Kotlin源代码使用Java字符串方法(split)?_Kotlin - Fatal编程技术网

如何直接从Kotlin源代码使用Java字符串方法(split)?

如何直接从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
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
是一种可选的方法,我会修正我的答案。谢谢您的反馈,先生。现在怎么样?