SemaTrain Logo Ein Fachportal von SemaTrain

Strings & Collections: Text und Datenstrukturen

Sie arbeiten mit Text und Datenlisten: Strings sauber verarbeiten, Collections sinnvoll wählen (List, Set, Map) – kursnah im SemaTrain-Kontext.

Hinweis: Beispiele sind didaktisch und nutzen Beispieldaten.

Java Grundlagen Schulung – Kursbezug

Dieses Kapitel ist Teil des Lernpfads zur Java Grundlagen Schulung. Termine & Buchung laufen über SemaTrain.de.

Hinweis: Beispiele sind didaktisch und nutzen Beispieldaten.

Ziel dieses Kapitels: Sie können Texte zuverlässig verarbeiten (String, StringBuilder) und typische Daten sammlen/zuordnen (List, Set, Map) – passend zum Problem.

Worum geht’s?

Lehr-Lernziele

Nach diesem Kapitel können Sie …

Wie Ziele erreicht werden: Beispiele trainieren String-Methoden (LZ1), StringBuilder (LZ2) sowie List/Set/Map + Iteration (LZ3–LZ4). Das Mini-Projekt kombiniert alles in einer kleinen „Kursübersicht“.

Strings in der Praxis

Im Kurskontext tauchen Strings überall auf: Kursname, Format, Ort, Tags, Notizen, Teilnehmernamen.

Beispiel: trim/contains/startsWith/equals (null-safe) (Java)
public class StringBasics {
  public static void main(String[] args) {
    String kurs = "  Java Grundlagen Schulung  ";
    String format = "Online";

    // Aufräumen
    String clean = kurs.trim();

    // Suchen/prüfen
    boolean hatJava = clean.contains("Java");
    boolean beginntMitJava = clean.startsWith("Java");

    // Vergleichen (Inhalt)
    boolean istOnline = "Online".equals(format); // null-safe

    System.out.println("clean: " + clean);
    System.out.println("hatJava: " + hatJava);
    System.out.println("beginntMitJava: " + beginntMitJava);
    System.out.println("istOnline: " + istOnline);
  }
}

split(): aus Text wird Struktur

Typisch: CSV-/Tag-Listen oder ein „Kurs|Ort|Format“-String aus einer Datei.

Beispiel: Tags per split() zerlegen (Java)
import java.util.Arrays;

public class SplitBeispiel {
  public static void main(String[] args) {
    String tags = "java,grundlagen,online";

    String[] teile = tags.split(",");

    System.out.println(Arrays.toString(teile));
    System.out.println("Anzahl Tags: " + teile.length);
  }
}

StringBuilder: Text effizient zusammenbauen

Regel: „+“ ist ok für wenige Teile. In Schleifen → StringBuilder.

Beispiel: StringBuilder in einer Schleife (Java)
public class StringBuilderBeispiel {
  public static void main(String[] args) {

    int dauerTage = 3;
    StringBuilder sb = new StringBuilder();

    sb.append("Tagesplan: ");

    for (int tag = 1; tag <= dauerTage; tag++) {
      sb.append("Tag ").append(tag).append("; ");
    }

    System.out.println(sb.toString());
  }
}

Collections: List vs Set vs Map

List (Reihenfolge, Duplikate ok)

List: Reihenfolge behalten (Java)
import java.util.*;

public class ListBeispiel {
  public static void main(String[] args) {
    List<String> teilnehmer = new ArrayList<>();
    teilnehmer.add("Max");
    teilnehmer.add("Sara");
    teilnehmer.add("Max"); // Duplikat ok

    System.out.println("TN: " + teilnehmer);
    System.out.println("Erster: " + teilnehmer.get(0));
  }
}

Set (eindeutig)

Set: Duplikate entfernen (Java)
import java.util.*;

public class SetBeispiel {
  public static void main(String[] args) {
    Set<String> uniqueTags = new HashSet<>();
    uniqueTags.add("java");
    uniqueTags.add("grundlagen");
    uniqueTags.add("java"); // wird ignoriert

    System.out.println("Tags: " + uniqueTags);
  }
}

Map (Schlüssel → Wert)

Typisch: Kursname → Preis, Kurs-ID → Objekt, Tag → Anzahl.

Map: Zuordnung Schlüssel→Wert (Java)
import java.util.*;

public class MapBeispiel {
  public static void main(String[] args) {
    Map<String, Integer> teilnehmerProKurs = new HashMap<>();

    teilnehmerProKurs.put("Java Grundlagen", 18);
    teilnehmerProKurs.put("Java Grundlagen", 19); // überschreibt
    teilnehmerProKurs.put("OOP Basics", 12);

    System.out.println(teilnehmerProKurs);
    System.out.println("Java Grundlagen: " + teilnehmerProKurs.get("Java Grundlagen"));
  }
}

Iteration: Durchlaufen und zählen

Ein Klassiker: Tags zählen oder Teilnehmerliste ausgeben.

Beispiel: Häufigkeiten zählen (Map + getOrDefault) (Java)
import java.util.*;

public class ZaehlenMitMap {
  public static void main(String[] args) {
    List<String> tags = Arrays.asList("java", "grundlagen", "java", "online", "java");

    Map<String, Integer> counts = new HashMap<>();

    for (String t : tags) {
      counts.put(t, counts.getOrDefault(t, 0) + 1);
    }

    System.out.println(counts); // z.B. {java=3, grundlagen=1, online=1}
  }
}

Praxisaufgabe (Mini)

Sie bauen eine kleine Kursübersicht aus Text + Collections.

Beitrag zu den Lehr-Lernzielen: LZ1 (String-Handling), LZ2 (StringBuilder), LZ3 (Collection-Wahl), LZ4 (Iteration/Auswertung).

  1. Sie haben eine Liste von Kurszeilen als String (z.B. \"Java Grundlagen|Online|3|1490|java,grundlagen\").
  2. Splitten Sie je Zeile in Felder (Name, Format, Dauer, Preis, Tags).
  3. Speichern Sie:
    • alle Kursnamen in einer List (für Ausgabe in Reihenfolge)
    • alle Tags in einem Set (unique)
    • Tag-Häufigkeiten in einer Map
  4. Bauen Sie am Ende eine schöne Ausgabe (StringBuilder).
Lösung anzeigen
Lösung: Kursübersicht (String + List/Set/Map + StringBuilder) (Java)
import java.util.*;

public class KursUebersichtProjekt {

  public static void main(String[] args) {

    // Beispiel-Daten (didaktisch)
    List<String> zeilen = Arrays.asList(
      "Java Grundlagen|Online|3|1490|java,grundlagen,online",
      "OOP Basics|Praesenz|2|1190|java,oop",
      "Fehlerbehandlung|Online|1|590|java,debug,online"
    );

    List<String> kursNamen = new ArrayList<>();
    Set<String> uniqueTags = new HashSet<>();
    Map<String, Integer> tagCounts = new HashMap<>();

    for (String z : zeilen) {
      String[] f = z.split("\\|");
      String name = f[0];
      String format = f[1];
      int dauer = Integer.parseInt(f[2]);
      double preis = Double.parseDouble(f[3]);

      kursNamen.add(name);

      // Tags
      String[] tags = f[4].split(",");
      for (String t : tags) {
        String tag = t.trim();
        uniqueTags.add(tag);
        tagCounts.put(tag, tagCounts.getOrDefault(tag, 0) + 1);
      }
    }

    // Ausgabe bauen
    StringBuilder sb = new StringBuilder();
    sb.append("Kurse (Reihenfolge):\n");
    for (String k : kursNamen) {
      sb.append("- ").append(k).append("\n");
    }

    sb.append("\nUnique Tags: ").append(uniqueTags).append("\n");
    sb.append("Tag-Haeufigkeiten: ").append(tagCounts).append("\n");

    System.out.println(sb.toString());
  }
}
Optional: typische Stolperfallen
  • Split mit |: In Java-RegEx muss das Pipe escaped werden: split(\"\\\\|\").
  • String-Vergleich: equals() statt ==.
  • „+“ in Schleifen: lieber StringBuilder verwenden.
  • Map zählen: getOrDefault spart if/else.

Kurz-Takeaways

Quiz: Strings & Collections

1. Welche Aussage stimmt? (LZ3)

2. Wie vergleichen Sie zwei Strings inhaltlich korrekt? (LZ1)

3. Warum nimmt man StringBuilder häufig in Schleifen? (LZ2)

4. Wie zählen Sie in einer Map am einfachsten hoch? (LZ4)

Praxisaufgabe

Mini-Projekt: Kursübersicht aus Zeilen (Split + List/Set/Map)

Sie lesen Kursdaten aus Textzeilen, zerlegen sie und erstellen eine Auswertung.

Beitrag zu den Lehr-Lernzielen: LZ1 (split/equals), LZ2 (StringBuilder), LZ3 (List/Set/Map), LZ4 (Iteration/Zählen).

Aufgabe

Lösung anzeigen
Lösung: Mini-Projekt Kursübersicht (Java)
import java.util.*;

public class KursUebersichtMiniProjekt {
  public static void main(String[] args) {

    List<String> zeilen = Arrays.asList(
      "Java Grundlagen|Online|3|1490|java,grundlagen,online",
      "Vererbung|Praesenz|1|590|java,oop",
      "Exceptions|Online|1|590|java,debug,online"
    );

    List<String> kurs = new ArrayList<>();
    Set<String> tagsUnique = new HashSet<>();
    Map<String, Integer> tagsCount = new HashMap<>();

    for (String z : zeilen) {
      String[] f = z.split("\\|");
      kurs.add(f[0]);

      String[] tags = f[4].split(",");
      for (String t : tags) {
        String tag = t.trim();
        tagsUnique.add(tag);
        tagsCount.put(tag, tagsCount.getOrDefault(tag, 0) + 1);
      }
    }

    StringBuilder sb = new StringBuilder();
    sb.append("Kurse:\n");
    for (String k : kurs) sb.append("- ").append(k).append("\n");
    sb.append("\nUnique Tags: ").append(tagsUnique).append("\n");
    sb.append("Tag-Counts: ").append(tagsCount);

    System.out.println(sb.toString());
  }
}