2017-07-31 10 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[]が返され、より効率的でした。

JavaのString::split(String)をKotlinソースから直接呼び出すにはどうすればよいですか?

答えて

4

あなたはkotlin.Stringjava.lang.Stringmappedになりますが、あなたが警告を取得しますので、java.lang.String#splitを使用し、その後java.lang.Stringkotlin.Stringをキャストすることができます。例えば:@Renatoは、それが遅く、いくつかの状況でjava.lang.String#splitよりますmetionedとして

//        v--- PLATFORM_CLASS_MAPPED_TO_KOTLIN warnings 
val parts: Array<String> = (line as java.lang.String).split("\t") 

また、代わりにjava.util.regex.Pattern#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を使用しないでください。

関連する問題