Stringi w Javie: metody, char i StringBuilder

Zaktualizowano 22 października 2026

Stringi w Javie potrafią więcej, niż tylko dać się wypisać: String zna swoją długość, możesz wycinać z niego fragmenty, szukać znaków i przechodzić przez niego znak po znaku. Metody do tego wywołujesz po kropce: text.length().

Długość, fragmenty, wyszukiwanie

Najważniejsze metody:

  • length(): liczba znaków
  • charAt(i): znak na pozycji i, liczonej od 0 jak w tablicach w Javie
  • substring(start, end): fragment od start do pozycji przed end; substring(start) bierze wszystko do końca
  • indexOf('@'): pozycja pierwszego trafienia, -1, jeśli go nie ma
  • contains("Java"): true, jeśli fragment występuje
  • toUpperCase(), toLowerCase(): wszystko wielkimi albo małymi literami
  • trim(): usuwa spacje na początku i na końcu

Stringa nie da się zmienić. Wszystkie te metody zwracają nowy String, a stary zostaje taki, jaki był. Dlatego ostatnia linia znowu wypisuje Hello, Java!.

public class Main {    public static void main(String[] args) {        String text = "  Hello, Java!  ";        String clean = text.trim();        System.out.println("[" + clean + "]");        System.out.println("Length: " + clean.length());        System.out.println("First: " + clean.charAt(0));        System.out.println("Last: " + clean.charAt(clean.length() - 1));
        System.out.println(clean.substring(0, 5));        System.out.println(clean.substring(7));        System.out.println(clean.indexOf(','));        System.out.println(clean.indexOf('x'));        System.out.println(clean.contains("Java"));
        System.out.println(clean.toUpperCase());        System.out.println(clean);    }}

Znak po znaku

Pojedynczy znak ma typ char i stoi w pojedynczych apostrofach: 'a'. Znaki porównujesz przez ==. Pętlą for od 0 do length() - 1 i metodą charAt(i) przechodzisz przez tekst znak po znaku.

Dla pojedynczych znaków są gotowe sprawdzenia: Character.isDigit(c), Character.isLetter(c) i Character.isUpperCase(c).

Za każdym char kryje się liczba, a litery są ułożone po kolei. Dlatego możesz na nich liczyć: 'c' - 'a' daje 2. Wynik jest typu int. Z (char) przed wyrażeniem znowu powstaje z tego znak.

public class Main {    public static void main(String[] args) {        String password = "Secret42";        int digits = 0;        int upperCase = 0;        for (int i = 0; i < password.length(); i++) {            char c = password.charAt(i);            if (Character.isDigit(c)) {                digits++;            }            if (Character.isUpperCase(c)) {                upperCase++;            }        }        System.out.println("Digits: " + digits);        System.out.println("Upper case: " + upperCase);
        char letter = 'c';        int position = letter - 'a';        System.out.println(letter + " is letter number " + (position + 1));        char next = (char) (letter + 1);        System.out.println("After " + letter + " comes " + next);    }}

Dzielenie i składanie

split(" ") dzieli tekst przy każdej spacji i zwraca String[] z częściami. Przechodzisz po nim jak po każdej tablicy.

Tekst wynikowy możesz składać kawałek po kawałku przez +=. Przy wielu częściach lepszy jest StringBuilder: append(...) dokleja na końcu, a toString() zwraca gotowy String.

public class Main {    public static void main(String[] args) {        String sentence = "Java is fun";        String[] words = sentence.split(" ");        System.out.println(words.length + " words");
        String initials = "";        for (String word : words) {            initials += word.charAt(0);        }        System.out.println(initials);
        StringBuilder sb = new StringBuilder();        for (int i = words.length - 1; i >= 0; i--) {            sb.append(words[i]);            if (i > 0) {                sb.append(" ");            }        }        System.out.println(sb.toString());    }}

Typowe błędy

  • Porównywanie Stringów przez ==

    == sprawdza, czy dwie zmienne wskazują na ten sam obiekt, a nie czy litery są takie same. Przy tekstach wczytanych albo złożonych z części wynik często jest false:

    String a = "Java";String b = "Ja";b += "va";System.out.println(a == b);      // falseSystem.out.println(a.equals(b)); // true

    Teksty zawsze porównuj przez equals. Tylko pojedyncze char porównujesz przez ==.

  • Wynik nie został zapisany

    Samo name.toUpperCase(); niczego nie zmienia, bo Stringi są niezmienne. Wynik musisz zapisać: name = name.toUpperCase();.

  • length, length() czy size()?

    W tablicy to numbers.length bez nawiasów, w Stringu text.length() z nawiasami. Gdy je pomylisz, kompilator zgłasza cannot find symbol.

  • Koniec w substring

    substring(0, 3) zwraca znaki 0, 1 i 2, koniec nie jest wliczany. Jeśli pozycja leży za tekstem, program kończy się błędem StringIndexOutOfBoundsException. To samo dzieje się przy charAt(0) na pustym Stringu.

  • Mylenie char i String

    'a' to char, "a" to String. Suma dwóch char daje liczbę: 'a' + 'b' to 195. Dopiero gdy bierze w tym udział String, znaki są doklejane: "" + 'a' + 'b' to "ab".

Zadania z tego tematu

Przećwicz to, czego się nauczyłeś, od razu w przeglądarce. Testy natychmiast sprawdzają twoje rozwiązanie.

Powiązane artykuły