Stringnormalisierung

Datenbereinigung in Java

Dennis Lee

Software Engineer

Lebensmittellager-Datensatz

  • In diesem Kapitel arbeiten wir mit einem Lagerbestands-Datensatz für Lebensmittel
  • Wir ändern Spalten wie Produktname, um Transformationen zu zeigen

 

Product Name Category Status Date Received Quantity
Eggplant Fruits & Vegetables Discontinued 3/1/25 46
VEGETABLE OIL Oils & Fats Backordered 4/1/25 51
Cheese Dairy Active 6/1/25 78
Fresh (Organic) *Carrots* Fruits & Vegetables Discontinued 5/1/25 51
Bell Pepper Fresh Fruits & Vegetables Active 5/2/25 67
Datenbereinigung in Java

Warum Stringnormalisierung wichtig ist

  • Unsaubere Strings: Computer erkennen Text nicht zuverlässig
  • Beispiel: Inventar im Lebensmittelhandel
  • Lösung: Strings normalisieren

 

String[] messyProducts = {
    "Eggplant ",              // Zusätzliches Leerzeichen am Ende
    "VEGETABLE OIL",             // Uneinheitliche Groß-/Kleinschreibung
    "Fresh (Organic) *Carrots*", // Sonderzeichen
    "Bell   Pepper    Fresh",    // Zusätzliche Leerzeichen zwischen Wörtern
};
Datenbereinigung in Java

Führende und nachgestellte Leerzeichen entfernen

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // Entfernt führende/abschließende Leerzeichen
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Datenbereinigung in Java

Schreibweise standardisieren

List<String> products = Arrays.asList("Eggplant", "VEGETABLE OIL", "cheese");

products.stream()
.map(String::toLowerCase) // Alles in Kleinbuchstaben umwandeln
.forEach(System.out::println); // Jedes Produkt ausgeben
eggplant
vegetable oil
cheese
Datenbereinigung in Java

Regex-Muster

  • Reguläre Ausdrücke (Regex): spezielle Muster zum Abgleichen von Text$^1$
  • [^a-zA-Z\\s]: Findet jedes Zeichen, das kein Buchstabe oder Leerzeichen ist
// Dieses Muster trifft auf jedes Zeichen, das NICHT ist:
[       // Anfang der Zeichengruppe
^       // NICHT – alles außerhalb dieser Gruppe
 a-z     // beliebiger Kleinbuchstabe
 A-Z     // beliebiger Großbuchstabe
 \\s     // beliebiges Leerraumzeichen (zusätzliches \ für Java nötig)
]       // Ende der Zeichengruppe

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Datenbereinigung in Java

Sonderzeichen bereinigen

String dirtyName = "Fresh (Organic) *Carrots*"; // Sonderzeichen: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Nicht-Buchstaben entfernen
System.out.println(cleaned); // Ausgabe: "Fresh Organic Carrots"
Fresh Organic Carrots
Datenbereinigung in Java

Mehrfache Leerzeichen bereinigen

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // Mehrere Leerzeichen finden

String messyProduct = "Bell Pepper Fresh"; // Enthält Extra-Leerzeichen // Mehrere Leerzeichen durch eins ersetzen String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Datenbereinigung in Java

Alles zusammenführen

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Produktnamen aus unserem Lebensmittellager-Datensatz

messyProducts.stream()
        .map(s -> s.trim()                       // Außenliegende Leerzeichen entfernen
                .replaceAll("[^a-zA-Z\\s]", "")  // Sonderzeichen entfernen
                .replaceAll("\\s+", " ")         // Innere Abstände korrigieren
                .toLowerCase())                  // Groß-/Kleinschreibung vereinheitlichen
        .forEach(System.out::println);
Datenbereinigung in Java

Alles zusammen: Ausgaben

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Datenbereinigung in Java

Lass uns üben!

Datenbereinigung in Java

Preparing Video For Download...