Práce s textem

Proč to potřebuji?

Práce s textovými řetězci patří mezi nejčastější operace v programování. Porozumění rozdílu mezi String a StringBuilder a znalost parsování textu je základ pro zpracování dat.

Teorie

String je neměnný (immutable) – každá operace vytváří nový objekt. StringBuilder je měnitelný – efektivní pro opakované skládání řetězců.

Parsování textu: split(), substring(), regulární výrazy (Pattern, Matcher), Scanner.

Příklady

// === Základní operace se String ===
String s = "Hello World";
s.length();                    // 11
s.charAt(0);                   // 'H'
s.substring(0, 5);             // "Hello"
s.toUpperCase();               // "HELLO WORLD"
s.contains("World");           // true
s.indexOf("World");            // 6
s.replace("World", "Java");    // "Hello Java"
s.trim();                      // odstraní mezery na krajích
s.isEmpty();                   // false
s.equals("Hello World");       // true (porovnání obsahu!)
// POZOR: == porovnává reference, .equals() porovnává obsah

// === StringBuilder – efektivní skládání ===
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append("slovo ").append(i).append(", ");
}
String vysledek = sb.toString();

// === Parsování textu ===
String csv = "Jan;Novák;25;Praha";
String[] casti = csv.split(";");
// casti = ["Jan", "Novák", "25", "Praha"]

String jmeno = casti[0];                  // "Jan"
int vek = Integer.parseInt(casti[2]);     // 25

// === Regulární výrazy ===
import java.util.regex.*;

String text = "Email: jan@email.cz, eva@firma.com";
Pattern pattern = Pattern.compile("[\\w.]+@[\\w.]+\\.[a-z]+");
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
    System.out.println("Nalezen email: " + matcher.group());
}
// Nalezen email: jan@email.cz
// Nalezen email: eva@firma.com

// === String.format ===
String formatovany = String.format("Jméno: %s, Věk: %d, Průměr: %.2f",
    "Jan", 25, 3.14159);
// "Jméno: Jan, Věk: 25, Průměr: 3.14"

Shrnutí

Klíčové body

  • String je immutable, StringBuilder je mutable
  • Porovnávat pomocí .equals(), nikdy ==
  • split() + Integer.parseInt() pro parsování CSV apod.
  • Pattern + Matcher pro regulární výrazy