Musterprüfung

Datenbereinigung in Java

Dennis Lee

Software Engineer

Warum wir Musterprüfung brauchen

  • Daten müssen bestimmten Formaten folgen, um korrekt zu sein
  • Beispiel: Datumsangaben sollten konsistent wie d-MMM-yy sein
  • Problem: inkonsistente Datumsformate wie "24/02/22"
  • Lösung: Musterprüfung nutzen, um Ausreißer zu finden

 

// Diese Datumsangaben haben wir aus dem Datensatz extrahiert
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Datenbereinigung in Java

Drei Arten der Musterprüfung

  • Vollständiger Musterabgleich
    • Verwenden, wenn das Format exakt sein muss
    • Beispiel: Datumsprüfung für Format d-MMM-yy
  • Mustersuche
    • Verwenden, wenn die Position egal ist
    • Beispiel: Produktkategorien in Beschreibungen finden/prüfen
    • Produkte mit "Dark Chocolate": "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • Zeichenabgleich
    • Für schnelles Screening
    • Beispiel: prüfen, ob ein Mengenfeld Buchstaben enthält ("12.5x")
Datenbereinigung in Java

Muster mit Regex definieren

  • Datumsformat d-MMM-yy abgleichen (z. B. "4-Jan-22")
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // 1–2 Ziffern für den Tag (z. B. 4 oder 27)
-            // Bindestrich als Trenner

[A-Za-z]{3} // genau 3 Buchstaben für den Monat wie Jan; groß/klein - // Bindestrich als Trenner
\\d{2} // genau 2 Ziffern für das Jahr (z. B. 22)
Datenbereinigung in Java

Vollständiger Musterabgleich

import java.util.regex.Pattern;
// d-MMM-yy abgleichen
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");

for (String date : dates) { // Prüfen, ob date dem datePattern entspricht boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " ist gültig: " + isValid); }
Datenbereinigung in Java

Vollständiger Musterabgleich: Ausgaben

4-Jan-22 ist gültig: true
1-Aug-22 ist gültig: true
7-Jul-22 ist gültig: true
27-Apr-22 ist gültig: true
24/02/22 ist gültig: false
Datenbereinigung in Java

Muster finden

import java.util.regex.Matcher;
Pattern monthPattern = Pattern.compile("[A-Za-z]{3}"); // 3 Buchstaben wie "Jan"

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // Ist monthPattern in date?
if (matcher.find()) { // Gibt true zurück, wenn das Muster gefunden wird
// matcher.group() gibt den Treffer zurück System.out.println("Monat gefunden: " + matcher.group()); } else { System.out.println("Kein Monat gefunden in: " + date); } }
Datenbereinigung in Java

Muster finden: Ausgaben

Monat gefunden: Jan
Monat gefunden: Aug
Monat gefunden: Jul
Monat gefunden: Apr
Kein Monat gefunden in: 24/02/22
Datenbereinigung in Java

Zeichen abgleichen

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // Auf Ziffern in date prüfen
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// Auf Buchstaben (Groß/Klein) in date prüfen CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // Auf Bindestriche prüfen System.out.println(date + " hat gültige Zeichen: " + isValid); }
Datenbereinigung in Java

Zeichen abgleichen: Ausgaben

4-Jan-22 hat gültige Zeichen: true
1-Aug-22 hat gültige Zeichen: true
7-Jul-22 hat gültige Zeichen: true
27-Apr-22 hat gültige Zeichen: true
24/02/22 hat gültige Zeichen: false
Datenbereinigung in Java

Alles zusammenführen

// Muster d-MMM-yy, z. B. 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Vollständiger Musterabgleich (entspricht date dem datePattern?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Mustersuche (enthält date eine Monats-Teilzeichenkette?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Zeichenabgleich (enthält date Ziffern?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Datenbereinigung in Java

Lass uns üben!

Datenbereinigung in Java

Preparing Video For Download...