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
Stringje immutable,StringBuilderje mutable- Porovnávat pomocí
.equals(), nikdy== split()+Integer.parseInt()pro parsování CSV apod.Pattern+Matcherpro regulární výrazy