2017-07-31 34 views
3

做一些分析,看來我的瓶頸是Kotlin kotlin.CharSequence.split()擴展功能。如何從Kotlin源直接使用Java String方法(分割)?

我的代碼只是做這樣的事情:

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

正如你可能已經注意到,partsList<String>

我想直接使用Java的split進行基準測試,該測試返回String[]並且效率可能更高。

如何直接從Kotlin源調用Java的String::split(String)

回答

4

你可以蒙上了kotlin.Stringjava.lang.String然後使用java.lang.String#split因爲kotlin.Stringmappedjava.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()) 
+0

謝謝,這有助於很多! – Renato

+0

@Renato完全沒有。很高興它幫助你。 –

+1

如果有人使用這個,你可以使用'@Suppress(「PLATFORM_CLASS_MAPPED_TO_KOTLIN」)' – Renato

2

你可以這樣做:

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

但不推薦不要使用kotlin.String,因爲編譯器可能會告訴你。