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ówcharAt(i): znak na pozycjii, liczonej od 0 jak w tablicach w Javiesubstring(start, end): fragment odstartdo pozycji przedend;substring(start)bierze wszystko do końcaindexOf('@'): pozycja pierwszego trafienia,-1, jeśli go nie macontains("Java"):true, jeśli fragment występujetoUpperCase(),toLowerCase(): wszystko wielkimi albo małymi literamitrim(): 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 jestfalse:String a = "Java";String b = "Ja";b += "va";System.out.println(a == b); // falseSystem.out.println(a.equals(b)); // trueTeksty zawsze porównuj przez
equals. Tylko pojedynczecharporó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.lengthbez nawiasów, w Stringutext.length()z nawiasami. Gdy je pomylisz, kompilator zgłaszacannot 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łędemStringIndexOutOfBoundsException. To samo dzieje się przycharAt(0)na pustym Stringu.Mylenie char i String
'a'tochar,"a"toString. Suma dwóchchardaje liczbę:'a' + 'b'to195. 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
- TabliceTablice w Javie w prosty sposób: tworzenie, przechodzenie pętlą, tablice dwuwymiarowe. Z przykładami i typowymi błędami, np. złym indeksem.Czytaj artykuł
- Metody i rekurencjaMetody w Javie w prosty sposób: parametry, return, przeciążanie, varargs i rekurencja z przykładami. Do tego typowe błędy, np. brakujący return.Czytaj artykuł
- Instrukcje warunkoweInstrukcje warunkowe w Javie: if, else if, switch oraz && i || prosto wyjaśnione. Z przykładami i typowymi błędami, które kosztują punkty na kolokwium.Czytaj artykuł