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.

String szablony „$…” „””wieloliniowe””” metody
1

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”.

Tekst w cudzysłowie
val imie = "Krzysztof"
val miasto = "Lębork"
val pusty = ""          // pusty tekst – też poprawny String
String jest niezmienny

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.

2

Łączenie tekstów operatorem +

Teksty można sklejać operatorem +. Do tekstu można też dołączać liczby – zostaną automatycznie zamienione na tekst.

Sklejanie operatorem +
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.

3

Szablony tekstu – interpolacja

Szablon pozwala wstawić wartość zmiennej wprost do tekstu – wystarczy poprzedzić jej nazwę znakiem $. To znacznie czytelniejsze niż sklejanie plusami.

$zmienna – wstawienie wartości
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: ${…}.

${wyrażenie} – obliczenia w tekście
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
Prosta zasada

Sama zmienna – wystarczy $nazwa. Cokolwiek bardziej złożonego (działanie, kropka, metoda) – obejmij to klamrami: ${...}.

4

Ł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.

Tekst na wiele 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.

Wieloliniowy tekst z szablonami
val imie = "Anna"
val klasa = "4TP"

val karta = """
    Imię:  $imie
    Klasa: $klasa
""".trimIndent()

println(karta)
5

Podstawowe metody i właściwości

String ma wiele przydatnych metod. Oto te, które poznasz na start:

ZapisDziałaniePrzykład
.lengthLiczba znaków (właściwość, bez nawiasów!)"Kotlin".length6
.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"
Metody w praktyce
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"
Metody zwracają nowy tekst

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:

Dostęp do pojedynczego znaku
val slowo = "Kotlin"
println(slowo[0])   // 'K' (pierwszy znak, indeks 0)
println(slowo[1])   // 'o'
6

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:

ZapisZnaczenie
\nPrzejście do nowej linii
\tTabulator (wcięcie)
\"Znak cudzysłowu wewnątrz tekstu
\\Ukośnik wsteczny
\$Znak dolara (gdy nie ma być szablonem)
Znaki specjalne w akcji
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)
7

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
8

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, \", \\, \$.
9

Zadania do wykonania

Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).

Zadanie 1 łatwe

Zadeklaruj zmienne z Twoim imieniem i wiekiem. Za pomocą szablonu wypisz zdanie typu: „Nazywam się Anna i mam 18 lat”.

Zadanie 2 łatwe

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().

Zadanie 3 łatwe

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).

Zadanie 4 średnie

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().