4

Kotlinで最初の一歩を踏み出し、単純な文字列分割関数を作成しようとしています。私はこれから始めました:

fun splitCSV(s : String) : Array<String> {
    return s.split(",");
}

私はこれもこのように書くことができると思います:

fun splitCSV(s : String) : Array<String> = s.split(",");

しかし、s.splitがではArray<String?>?なくを返すため、タイプエラーが発生しますArray<String>。キャストを行う簡単な方法が見つからなかったので、変換を行うためにこの関数を作成しました。

fun forceNotNull<T>(a : Array<T?>?) : Array<T> {
    return Array<T>(a!!.size, { i -> a!![i]!! });
}

fun splitCSV(s : String) : Array<String> = forceNotNull(s.split(","));

ただし、実行時エラーが発生します。

ClassCastException:[Ljava.lang.Object; [Ljava.lang.Stringにキャストできません

TforceNotNullをStringに変更すると機能するので、解決策に近づいていると思います。

これはそれについて行く正しい方法ですか?もしそうなら、どうすればforceNotNull一般的なケースで動作するように修正できますか?

4

3 に答える 3

1

それが最良の方法かどうかはわかりませんが、これはうまくいくようです:

fun splitCSV(s : String) : Array<String> {
  return ( s.split(",") as? Array<String>? ).sure() ;
}

IntelliJは「このキャストは決して成功できない」as?と強調していますが...だから私の最初の楽観主義は薄れています

奇妙なことに、それはうまくいくようです...

同様に:

fun splitCSV(s : String) : Array<String> {
  return s.split(",").sure() as Array<String> ;
}

しかし、同じ警告で...私は混乱しているので、今はやめます:-/

編集

もちろん、次のように動作させることができますList<String>:

import java.util.List

fun splitCSV(s : String) : List<String> {
  return s.split(",")!!.map<String?,String> { it!! }
}

しかし、それは問題ではありませんでした;-)

于 2012-04-03T12:19:43.643 に答える
0

簡単な方法で、kotlin で文字列を配列にキャストできます。

fun splitCSV(s: String) = s.split(",").toTypedArray()

この関数を呼び出す

val array: Array<String> = splitCSV("ABC,XYZ,test,rupesh")

kotlin CharSequence.split(regex) では List が返されるため、型 Array を変更する場合は .toTypedArray() メソッドを使用します

于 2021-08-18T18:16:02.963 に答える