String i szablony
Tekst to jeden z najczęściej używanych typów. Nauczysz się łączyć teksty, wstawiać
do nich wartości zmiennych za pomocą szablonów "$zmienna", tworzyć
łańcuchy wieloliniowe oraz korzystać z podstawowych metod, takich jak
length, uppercase, trim i substring.
Czym jest String
String to tekst – ciąg znaków zapisany w cudzysłowie. Może zawierać litery, cyfry, spacje i symbole. To w nim przechowujemy imiona, nazwy, komunikaty dla użytkownika i wszystko, co jest „słowne”.
val imie = "Krzysztof" val miasto = "Lębork" val pusty = "" // pusty tekst – też poprawny String
Raz utworzonego tekstu nie da się „w miejscu” zmienić. Metody takie jak
uppercase() czy trim() nie modyfikują
oryginału – zawsze zwracają nowy String. Wrócimy do tego
w sekcji o metodach.
Łączenie tekstów operatorem +
Teksty można sklejać operatorem +. Do tekstu można też dołączać
liczby – zostaną automatycznie zamienione na tekst.
val imie = "Anna" val wiek = 18 val opis = "Uczeń " + imie + " ma " + wiek + " lat" println(opis) // Uczeń Anna ma 18 lat
Działa, ale przy wielu fragmentach robi się to nieczytelne – łatwo zgubić spację albo plusa. Dlatego w Kotlinie znacznie częściej używamy szablonów, które poznasz w następnej sekcji.
Szablony tekstu – interpolacja
Szablon pozwala wstawić wartość zmiennej wprost do tekstu – wystarczy poprzedzić jej nazwę znakiem $. To znacznie czytelniejsze niż sklejanie plusami.
val imie = "Anna" val wiek = 18 val opis = "Uczeń $imie ma $wiek lat" println(opis) // Uczeń Anna ma 18 lat
Gdy chcesz wstawić coś więcej niż samą zmienną – obliczenie, wywołanie metody czy odwołanie z kropką – użyj nawiasów klamrowych: ${…}.
val a = 5 val b = 3 println("Suma: ${a + b}") // Suma: 8 val imie = "Krzysztof" println("Imię ma ${imie.length} znaków") // Imię ma 9 znaków
Sama zmienna – wystarczy $nazwa. Cokolwiek bardziej złożonego
(działanie, kropka, metoda) – obejmij to klamrami: ${...}.
Łańcuchy wieloliniowe
Gdy tekst ma zajmować kilka linii, zamiast zwykłego cudzysłowu
używamy potrójnego cudzysłowu """. Wszystko między nimi
zostaje zachowane dokładnie tak, jak je zapiszesz – razem z przejściami do nowej linii.
val wiersz = """ Kotlin jest prosty, Kotlin jest zwięzły, a my dopiero zaczynamy. """.trimIndent() println(wiersz)
Metoda trimIndent() usuwa wspólne wcięcie z każdej linii, dzięki czemu
możesz ładnie wciąć tekst w kodzie, a mimo to wynik nie będzie miał zbędnych spacji
z lewej strony. Szablony $zmienna działają również w tekstach
wieloliniowych.
val imie = "Anna" val klasa = "4TP" val karta = """ Imię: $imie Klasa: $klasa """.trimIndent() println(karta)
Podstawowe metody i właściwości
String ma wiele przydatnych metod. Oto te, które poznasz na start:
| Zapis | Działanie | Przykład |
|---|---|---|
.length | Liczba znaków (właściwość, bez nawiasów!) | "Kotlin".length → 6 |
.uppercase() | Wielkie litery | "abc".uppercase() → "ABC" |
.lowercase() | Małe litery | "ABC".lowercase() → "abc" |
.trim() | Usuwa spacje z początku i końca | " ok ".trim() → "ok" |
.substring(a, b) | Fragment od indeksu a do b (bez b) | "Kotlin".substring(0, 3) → "Kot" |
val tekst = " Kotlin " println(tekst.length) // 10 (razem ze spacjami) println(tekst.trim()) // "Kotlin" println(tekst.trim().uppercase()) // "KOTLIN" (metody można łączyć) val slowo = "Programowanie" println(slowo.substring(0, 7)) // "Program"
Ponieważ String jest niezmienny, tekst.uppercase() nie zmienia
tekst – tworzy nowy tekst. Jeśli chcesz zachować
wynik, przypisz go do zmiennej: val duze = tekst.uppercase().
Indeksy znaków liczymy od zera: pierwszy znak ma indeks 0. Pojedynczy znak odczytasz przez nawias kwadratowy:
val slowo = "Kotlin" println(slowo[0]) // 'K' (pierwszy znak, indeks 0) println(slowo[1]) // 'o'
Znaki specjalne (escape)
Niektórych znaków nie da się wpisać wprost w cudzysłowie – np. samego cudzysłowu
albo przejścia do nowej linii. Zapisujemy je za pomocą ukośnika wstecznego
\ i specjalnego oznaczenia:
| Zapis | Znaczenie |
|---|---|
\n | Przejście do nowej linii |
\t | Tabulator (wcięcie) |
\" | Znak cudzysłowu wewnątrz tekstu |
\\ | Ukośnik wsteczny |
\$ | Znak dolara (gdy nie ma być szablonem) |
println("Linia 1\nLinia 2") // dwie linie println("Imię:\tAnna") // "Imię:" + tabulator + "Anna" println("Powiedział \"cześć\"") // Powiedział "cześć" println("Cena: 50\$") // Cena: 50$ (dolar dosłownie)
Częste błędy
❌ Błąd 1: brak klamr przy wyrażeniu w szablonie
❌ $ łapie tylko nazwę
val imie = "Anna"
println("Liczba liter: $imie.length")
// Wypisze: Anna.length
// (.length potraktowane
// jako zwykły tekst)
✅ Wyrażenie w klamrach
val imie = "Anna"
println("Liczba liter: ${imie.length}")
// Wypisze: 4
❌ Błąd 2: length z nawiasami
❌ length to nie metoda
val s = "Kotlin" println(s.length()) // Błąd! length jest // właściwością
✅ length bez nawiasów
val s = "Kotlin" println(s.length) // 6
❌ Błąd 3: oczekiwanie, że metoda zmieni oryginał
❌ Wynik wyrzucony
var s = "kotlin" s.uppercase() println(s) // kotlin (bez zmian!) // wynik nigdzie nie zapisany
✅ Zapisz wynik
var s = "kotlin" s = s.uppercase() println(s) // KOTLIN
❌ Błąd 4: substring poza zakresem
❌ Indeks większy niż tekst
val s = "Kot" println(s.substring(0, 10)) // Błąd w czasie działania! // tekst ma tylko 3 znaki
✅ Indeks w granicach
val s = "Kot" println(s.substring(0, 3)) // Kot
Podsumowanie
- String to tekst w cudzysłowie; jest niezmienny – metody zwracają nowy tekst.
- Teksty łączymy operatorem
+, ale czytelniej jest używać szablonów. - Szablon:
"$zmienna"dla samej zmiennej,"${wyrażenie}"dla działań i metod. - Tekst wieloliniowy zapisujemy w
"""...""";trimIndent()usuwa wspólne wcięcie. - Najważniejsze:
length(właściwość, bez nawiasów),uppercase(),lowercase(),trim(),substring(a, b). - Znaki liczymy od 0; pojedynczy znak:
tekst[0]. - Znaki specjalne:
\n,\t,\",\\,\$.
Zadania do wykonania
Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).
Zadeklaruj zmienne z Twoim imieniem i wiekiem. Za pomocą szablonu wypisz zdanie typu: „Nazywam się Anna i mam 18 lat”.
Zapisz swoje imię w zmiennej i wypisz, ile ma liter, używając
${imie.length} w szablonie. Następnie wypisz imię wielkimi
literami metodą uppercase().
Weź tekst ze zbędnymi spacjami, np. " Kotlin ". Wypisz jego
długość przed i po trim(), a następnie wypisz pierwsze trzy znanego
tekstu metodą substring(0, 3).
Stwórz „dyplom” jako tekst wieloliniowy ("""..."""),
w którym przez szablony wstawisz imię, klasę i nazwę szkoły zapisane wcześniej
w zmiennych. Zadbaj o czytelny układ (osobne linie, wcięcia) i użyj
trimIndent().