Как я могу использовать метод (String) Java String непосредственно из источника Kotlin?

Выполняя некоторые профилирования, кажется, что мое узкое место является kotlin.CharSequence.split() расширения Kotlin kotlin.CharSequence.split() .

Мой код просто делает что-то вроде этого:

 val delimiter = '\t' val line = "example\tline" val parts = line.split(delimiter) 

Как вы могли заметить, parts представляют собой List<String> .

Я хотел бы провести сравнение с использованием прямого split Java, которое возвращает String[] и может быть более эффективным.

Как я могу вызвать String::split(String) Java напрямую из источника Kotlin?

Вы можете использовать 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") 

Вы также можете использовать 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()) 

Вы можете сделать это:

 (line as java.lang.String).split(delimiter) 

Но не рекомендуется использовать kotlin.String как компилятор может вам рассказать.