Was ist das Kotlin-Äquivalent von Javas String []?

162

Ich sehe, dass Kotlin hat ByteArray, ShortArray, IntArray, CharArray, DoubleArray, FloatArray, die byte[], short[], int[],char[], double[], float[]in Java gleichwertig sind .

Jetzt frage ich mich, gibt es ein StringArrayÄquivalent zu Java String[]?

chancyWu
quelle
7
typealias StringArray = Array<String>;)
Marstran

Antworten:

224

Es gibt keinen Sonderfall für String, weil Stringein gewöhnlichen Referenztyp auf JVM ist, im Gegensatz zu Java Primitiven ( int, double, ...) - sie in einer Referenz Speicherung Array<T>erfordert sie in Objekte Box wie IntegerundDouble . Der Zweck von speziellen Arrays wie IntArrayin Kotlin besteht darin, nicht-boxed Primitive zu speichern, um den Overhead beim Boxen und Unboxing zu beseitigen (das gleiche wie bei Java int[]anstelle von Integer[]).

Sie können Array<String>(und Array<String?>für nullables) verwenden, was String[]in Java äquivalent ist :

val stringsOrNulls = arrayOfNulls<String>(10) // returns Array<String?>
val someStrings = Array<String>(5) { "it = $it" }
val otherStrings = arrayOf("a", "b", "c")

Siehe auch: Arrays in der Sprachreferenz

Hotkey
quelle
18

Verwenden Sie arrayOf , arrayOfNulls , emptyArray

var colors_1: Array<String> = arrayOf("green", "red", "blue")
var colors_2: Array<String?> = arrayOfNulls(3)
var colors_3: Array<String> = emptyArray()
Dan Alboteanu
quelle
16

Um ein Leerzeichen Array of Stringsin Kotlin zu erstellen , sollten Sie einen der folgenden sechs Ansätze verwenden:

Erste Ansatz:

val empty = arrayOf<String>()

Zweiter Ansatz:

val empty = arrayOf("","","")

Dritter Ansatz:

val empty = Array<String?>(3) { null }

Vierter Ansatz:

val empty = arrayOfNulls<String>(3)

Fünfter Ansatz:

val empty = Array<String>(3) { "it = $it" }

Sechster Ansatz:

val empty = Array<String>(0, { _ -> "" })
Andy Fedoroff
quelle
9

Diese Typen sind vorhanden, damit Sie Arrays der Grundelemente und nicht der Box-Typen erstellen können. Da String in Java kein Grundelement ist, können Sie es Array<String>in Kotlin nur als Äquivalent zu Java verwenden String[].

zsmb13
quelle
5

Für Stringsund andere Typen verwenden Sie einfach Array<*>. Der Grund IntArrayund andere Gründe sind, Autoboxing zu verhindern.

Bezieht int[]sich also darauf, IntArraywo sich Integer[]bezieht Array<Int>.

Nhaarman
quelle
1

Einige der gängigen Methoden zum Erstellen eines String-Arrays sind:

  1. var arr = Array (5) {""}

Dadurch wird ein Array von 5 Zeichenfolgen mit Anfangswerten als leere Zeichenfolge erstellt.

  1. var arr = arrayOfNulls <String?>(5)

Dadurch wird ein Array der Größe 5 erstellt, dessen Anfangswerte null sind. Sie können String-Daten verwenden, um das Array zu ändern.

  1. var arr = arrayOf ("Null", "Eins", "Zwei", "Drei")

Wenn Sie den Inhalt des Arrays bereits kennen, können Sie das Array direkt initialisieren.

  1. Es gibt auch eine einfache Möglichkeit, ein mehrdimensionales Array von Zeichenfolgen zu erstellen .

    var matrix = Array (5) {Array (6) {""}}

    Auf diese Weise können Sie eine Matrix mit 5 Zeilen und 6 Spalten mit den Anfangswerten der leeren Zeichenfolge erstellen.

Himanshu Garg
quelle
0

Dieses Beispiel funktioniert perfekt in Android

In Kotlin können Sie hierfür einen Lambda-Ausdruck verwenden. Die Kotlin Array Constructor-Definition lautet:

Array(size: Int, init: (Int) -> T)

Was ergibt:

skillsSummaryDetailLinesArray = Array(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

Oder:

skillsSummaryDetailLinesArray = Array<String>(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

In diesem Beispiel lautete die Felddefinition:

private var skillsSummaryDetailLinesArray: Array<String>? = null

Hoffe das hilft

user2288580
quelle
0

Sie können auch verwenden:

val frases = arrayOf("texto01","texto02 ","anotherText","and ")

beispielsweise.

João Arthur
quelle