CodeGym /Kursy /JAVA 25 SELF /Podstawowe metody klasy String

Podstawowe metody klasy String

JAVA 25 SELF
Poziom 9 , Lekcja 3
Dostępny

1. Metoda length(): ile znaków ma łańcuch?

Metoda length() zwraca liczbę znaków w łańcuchu. To nie do końca to samo, co „liczba bajtów” (zwłaszcza jeśli w łańcuchu są emoji lub znaki Unicode), ale w większości przypadków — właśnie to, czego potrzeba.

Przykład użycia

String name = "Vasilisa";
int length = name.length();
System.out.println("Liczba liter w imieniu: " + length); // 8

Po co to jest

  • Sprawdzić, czy użytkownik nie wprowadził pustego łańcucha.
  • Sprawdzić minimalną/maksymalną długość hasła.
  • Sprawdzić, ile znaków pozostało do limitu (np. w SMS-ie lub tweecie).

Przykład: sprawdzanie pustego łańcucha

String input = "";
if (input.length() == 0) 
{
    System.out.println("Łańcuch jest pusty!");
}

Wskazówka: do sprawdzenia „pustości” łańcucha jest też metoda isEmpty(), ale o niej nieco później.

Krótkie FAQ

  • Metoda length() nie przyjmuje argumentów (nawiasy są zawsze puste).
  • Jeśli łańcuch składa się ze spacji, one również są liczone jako znaki!
  • Jeśli łańcuch jest równy null, wywołanie length() spowoduje NullPointerException — najpierw sprawdź null.

2. Metoda substring(): wyodrębniamy część łańcucha

Metoda substring() pozwala uzyskać podłańcuch — „odciąć” fragment według podanych indeksów.

Istnieją dwie podstawowe formy wywołania:

  • str.substring(startIndex) — od pozycji startIndex do końca łańcucha.
  • str.substring(startIndex, endIndex) — od pozycji startIndex do endIndex (NIE wliczając znaku o indeksie endIndex).

Uwaga: indeksowanie znaków w łańcuchu zaczyna się od 0.

Przykłady użycia

Przykład 1: pobrać pierwsze trzy litery imienia

String name = "Vasilisa";
String firstThree = name.substring(0, 3); // "Vas"
System.out.println(firstThree);

Przykład 2: pobrać rozszerzenie pliku

String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);

Przykład 3: ostatnie 4 znaki łańcucha

String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("Ostatnie 4 cyfry: " + lastFour);

Specyfika i niuanse

  • Niepoprawne indeksy (startIndex < 0, endIndex > length, startIndex > endIndex) powodują StringIndexOutOfBoundsException.
  • Metoda zawsze zwraca nowy łańcuch — oryginalny nie ulega zmianie.
  • Druga forma (z dwoma parametrami) nie obejmuje znaku o indeksie endIndex.

String str = "abcdef"; 
// Indeksy: 0 1 2 3 4 5

str.substring(1, 4)  "bcd" // znaki o indeksach 1, 2, 3
Schemat działania substring(start, end)

3. Metoda indexOf(): szukamy znaku lub podłańcucha

Metoda indexOf() wyszukuje pozycję (indeks) pierwszego wystąpienia danego znaku lub podłańcucha.

  • Jeśli znaleziono — zwraca indeks (od 0).
  • Jeśli nie znaleziono — zwraca -1.

Przykłady użycia

Przykład 1: znaleźć pierwszą kropkę w adresie e-mail

String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("Pierwsza kropka na pozycji: " + dotIndex); // 4

Przykład 2: znaleźć podłańcuch

String text = "Kocham Java!";
int index = text.indexOf("Java");
System.out.println(index); // 7

Przykład 3: znaleźć znak po określonej pozycji

String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("Druga 'a' na pozycji: " + secondA);

Specyfika i niuanse

  • Jeśli znak/podłańcuch występują wielokrotnie, zwracany jest indeks pierwszego wystąpienia.
  • Aby znaleźć ostatnie wystąpienie, użyj lastIndexOf().
  • Dla znaku używaj pojedynczych cudzysłowów: 'a'; dla podłańcucha — podwójnych: "abc".

Przykład: wyszukiwanie rozszerzenia pliku

String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Rozszerzenie pliku: " + extension); // "docx"

4. Metoda charAt(): pobieramy znak według indeksu

Metoda charAt(index) zwraca znak łańcucha według jego indeksu.

Przykłady użycia

Przykład 1: sprawdzić pierwszą literę łańcucha

String city = "Minsk";
char first = city.charAt(0); // 'M'
System.out.println("Pierwsza litera: " + first);

Przykład 2: sprawdzić, czy łańcuch zaczyna się wielką literą

String word = "Java";
if (Character.isUpperCase(word.charAt(0))) 
{
    System.out.println("Słowo zaczyna się wielką literą!");
}

Przykład 3: przejść po wszystkich znakach łańcucha

String text = "Witaj";
for (int i = 0; i < text.length(); i++) 
{
    System.out.println("Znak #" + i + ": " + text.charAt(i));
}

Specyfika i niuanse

  • Indeks poza zakresem (np. -1 lub >= length) spowoduje StringIndexOutOfBoundsException.
  • Metoda zwraca wartość typu char, a nie łańcuch.

5. Metoda toCharArray(): przekształcamy łańcuch w tablicę znaków

Metoda toCharArray() — prosty sposób przekształcenia łańcucha w tablicę znaków (char[]). Przydatne do przetwarzania znak po znaku, sortowania, walidacji itp.

Przykład użycia:

String text = "Hello";
char[] characters = text.toCharArray();

for (char c : characters) 
{
    System.out.println(c);
}
// Wynik:
// H
// e
// l
// l
// o

Po co to:

  • Przetwarzanie znaków: tablice są wygodniejsze do logiki znak po znaku (np. sprawdzanie anagramów).
  • Zgodność: niektóre API oczekują char[] jako argumentu.

6. Metoda replace(): zamieniamy podłańcuchy

Metoda replace(CharSequence target, CharSequence replacement) zamienia wszystkie wystąpienia podłańcucha target na replacement. Zwraca nowy łańcuch, oryginalny nie ulega zmianie.

Przykład użycia:

String sentence = "Uwielbiam programowanie w Javie.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Wynik: Uwielbiam programowanie w Javie 25.

String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Wynik: support[at]company.com

Specyfika i niuanse

  • Zamieniane są wszystkie wystąpienia.
  • String jest niezmienny: replace() zwraca nowy łańcuch.
  • Dla złożonych reguł użyj replaceAll() z wyrażeniem regularnym.

7. Metody trim() i strip(): pozbywamy się białych znaków

Obie metody usuwają „niewidoczne” znaki na początku i końcu łańcucha.

  • trim() — klasyczna metoda: usuwa spacje, tabulacje, znaki nowej linii i część znaków sterujących, ale nie wszystkie spacje Unicode.
  • strip() — nowoczesna metoda: uwzględnia wszystkie rodzaje spacji zgodnie ze standardem Unicode. Preferowana w nowych projektach.

Przykład użycia:

String s1 = "   Witaj, świecie!   ";
System.out.println(s1.trim());
// Wynik: "Witaj, świecie!"

String s2 = " \u2005  Java 11  \u2005 "; // \u2005 — to spacja Unicode
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Wynik:
// trim():  Java 11  
// strip(): Java 11

Po co to:

  • Oczyszczanie danych wejściowych użytkownika z nadmiarowych spacji.
  • Normalizacja danych z plików/logów przed przetwarzaniem.

8. Praktyka: rozwiązujemy zadania

Zadanie 1: sprawdzenie długości hasła

String password = "qwerty";
if (password.length() < 8) 
{
    System.out.println("Hasło jest zbyt krótkie!");
}
else 
{
    System.out.println("Hasło jest w porządku.");
}

Zadanie 2: wyodrębnienie imienia z pełnego imienia i nazwiska

String fullName = "Ivanov Ivan Ivanovich";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Imię: " + name); // "Ivan"

Zadanie 3: sprawdzenie, czy łańcuch zaczyna się od określonej litery

String surname = "Petrov";
if (surname.charAt(0) == 'P')
{
    System.out.println("Nazwisko zaczyna się na literę P");
}

Zadanie 4: pobrać domenę z adresu e-mail

String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Domena: " + domain); // "gmail.com"

Zadanie 5: znaleźć wszystkie wystąpienia litery 'a' w łańcuchu

String s = "abrakadabra";
int pos = s.indexOf('a');
while (pos != -1) 
{
    System.out.println("Litera 'a' znaleziona na pozycji: " + pos);
    pos = s.indexOf('a', pos + 1); // szukamy od ostatnio znalezionej pozycji
}

9. Typowe błędy przy pracy z metodami String

Błąd nr 1: wyjście poza granice łańcucha
Bardzo często myli się indeksy i odwołuje do nieistniejącego znaku/podłańcucha.

String s = "Java";
char c = s.charAt(4); // Błąd! Indeksy 0..3
String s = "Hello";
String sub = s.substring(3, 10); // Błąd! Długość łańcucha — 5

Błąd nr 2: zamieszanie z włączaniem/wyłączaniem indeksu
Metoda substring(start, end) wlicza znak o indeksie start, ale NIE wlicza znaku o indeksie end.

Błąd nr 3: oczekiwanie, że indexOf zwróci coś innego niż -1, gdy podłańcuch nie występuje
Sprawdzaj wynik przed użyciem, zwłaszcza jeśli potem wykorzystujesz go w substring.

Błąd nr 4: nieprawidłowe traktowanie pustych łańcuchów
Jeśli łańcuch jest pusty (""), wywołania charAt(0) lub substring(0, 1) spowodują błąd. Najpierw sprawdź długość.

Błąd nr 5: praca z łańcuchami null
Jeśli łańcuch jest równy null, wywołanie dowolnej metody (length(), substring() itd.) spowoduje NullPointerException. Zawsze sprawdzaj null przed przetwarzaniem.

1
Zadanie
JAVA 25 SELF, poziom 9, lekcja 3
Niedostępne
Pobranie znaku po indeksie
Pobranie znaku po indeksie
1
Zadanie
JAVA 25 SELF, poziom 9, lekcja 3
Niedostępne
Wyszukiwanie podciągu w ciągu
Wyszukiwanie podciągu w ciągu
1
Zadanie
JAVA 25 SELF, poziom 9, lekcja 3
Niedostępne
Pobieranie podciągu
Pobieranie podciągu
1
Zadanie
JAVA 25 SELF, poziom 9, lekcja 3
Niedostępne
Sprawdzenie pierwszej litery i wyodrębnienie podciągu
Sprawdzenie pierwszej litery i wyodrębnienie podciągu
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION