Strings
fun main() {
val s = "Hallo Welt"
println("${s.length} ${s[0]} ${s.last()} ${s.substring(0, 5)} ${s.toUpperCase()} ${s.toLowerCase()}")
println(s.replace("Welt", "Kotlin"))
println(s.contains("Welt"))
println(s.startsWith("Hal"))
println(s.indexOf('W'))
println(s.split(" "))
println(s.reversed())
println(" x ".trim() + "|")
println("ab".repeat(3))
println("a,b;c".split(",", ";"))
println("kotlin".capitalize())
println(s.take(5) + "-" + s.drop(6))
println("Mia" + " " + 17)
println("42".padStart(5, '0'))
println("abc" < "abd")
println("Name: %s, Alter: %d".format("Mia", 17))
println(listOf("x", "y", "z").joinToString(" | "))
val roh = """
Mehrzeilig,
"Anführungszeichen" und \n bleiben roh.
""".trimIndent()
println(roh)
println("Tab:\tText \\ \" A")
}10 H t Hallo HALLO WELT hallo welt Hallo Kotlin true true 6 [Hallo, Welt] tleW ollaH x| ababab [a, b, c] Kotlin Hallo-Welt Mia 17 00042 true Name: Mia, Alter: 17 x | y | z Mehrzeilig, "Anf?hrungszeichen" und \n bleiben roh. Tab: Text \ " A
Strings sind unveränderlich. Vergleiche Inhalte mit == (ruft equals auf), Identität mit ===. Für viele Anhänge nutze StringBuilder.
fun main() {
val sb = StringBuilder()
for (i in 1..5) sb.append(i).append(',')
sb.setLength(sb.length - 1)
println(sb)
println(buildString { append("a"); append("b") })
val a = "x"; val b = "x"
println(a == b)
}1,2,3,4,5 ab true
if ist ein Ausdruck
fun main() {
val punkte = 78
if (punkte >= 90) {
println("sehr gut")
} else if (punkte >= 75) {
println("gut")
} else {
println("weiter üben")
}
val ergebnis = if (punkte >= 50) "bestanden" else "durchgefallen" // statt ternärem Operator
println(ergebnis)
println(maxOf(3, 8))
}gut bestanden 8
when: das mächtige switch
fun beschreibe(x: Any): String = when (x) {
0 -> "null"
1, 2, 3 -> "klein"
in 4..9 -> "mittel"
is Int -> "große Zahl"
is String -> "Text mit ${x.length} Zeichen"
is List<*> -> "Liste mit ${x.size} Elementen"
else -> "unbekannt"
}
fun main() {
for (v in listOf(0, 2, 7, 100, "Hallo", listOf(1, 2), 3.5)) println("$v: ${beschreibe(v)}")
val note = 87
val buchstabe = when {
note >= 90 -> "A"
note >= 80 -> "B"
else -> "C"
}
println(buchstabe)
}0: null 2: klein 7: mittel 100: gro?e Zahl Hallo: Text mit 5 Zeichen [1, 2]: Liste mit 2 Elementen 3.5: unbekannt B
when ohne Argument ersetzt lange if-else-Ketten. Als Ausdruck muss er alle Fälle abdecken (else).
Schleifen
fun main() {
for (i in 1..3) print("$i ")
println()
for (i in 10 downTo 1 step 4) print("$i ")
println()
for (i in 0 until 3) print("$i ")
println()
for ((index, wert) in listOf("a", "b", "c").withIndex()) print("$index=$wert ")
println()
for (c in "Kotlin") print("$c.")
println()
var n = 3
while (n > 0) { print("$n "); n-- }
println()
do { n++ } while (n < 3)
println(n)
aussen@ for (i in 1..3) {
for (j in 1..3) {
if (j == 2) continue@aussen
if (i == 3) break@aussen
print("$i$j ")
}
}
println()
repeat(3) { print("*") }
println()
}1 2 3 10 6 2 0 1 2 0=a 1=b 2=c K.o.t.l.i.n. 3 2 1 3 11 21 ***
Merke
- String-Funktionen:
substring,split,replace,contains,trim,repeat,format - Roh-Strings mit
"""..."""undtrimIndent() ifundwhenliefern Werte (kein? :nötig)whenmit Wert, Bereich (in), Typ (is) und ohne Argument- Schleifen:
for (x in 1..10),downTo,step,until, Labels mitbreak@name
Aufgabe
Schreibe FizzBuzz für 1 bis 20 mit when.