memo

Kotlin: 文字列

チェック

文字数

正規表現

java.lang.String と kotlin.String の互換性

java.lang.String と kotlin.String は同じではない

val ks = "hoge"
val js:java.lang.String = ks
// ==> type mismatch: inferred type is kotlin.String but java.lang.String was expected

が、キャストすると代入できる

val ks = "hoge"
val js:java.lang.String = (ks as java.lang.String)

で、次のような Java のコードを Kotlin で実行しようとすると、エラーになる

String s = new String( "abc".getBytes("ISO-8859_1"), "UTF-8" );

Kotlin の場合

val s = String( "abc".getBytes("ISO-8859_1"), "UTF-8" )
// ==> too many arguments for public constructor String() defined in kotlin.String

Kotlin には kotlin.String( byte[], String) というコンストラクターがない??
そこで Kotlin では次のようにできる

import java.nio.charset.*

val s = "abc".toByteArray( Charset.forName( "ISO-8859-1" )).toString( Charset.forName( "UTF-8" ))
// または
val s = "abc".toByteArray( StandardCharsets.ISO_8859_1 ).toString( StandardCharsets.UTF_8 )
// Charset の渡し方を変えているだけで、やっていることは同じ

(参考)
kotlin.String のコンストラクターから java.lang.String のコンストラクターを呼び出す処理は、kotlin-runtime-sources.jar の kotlin/text/StringsJVM.kt に記述されている

その他