Patroonvalidatie

Data opschonen in Java

Dennis Lee

Software Engineer

Waarom we patroonvalidatie nodig hebben

  • Data moet specifieke formaten volgen om correct te zijn
  • Voorbeeld: datums zouden een vast formaat moeten volgen, zoals d-MMM-yy
  • Probleem: inconsistente datumformaten zoals "24/02/22"
  • Oplossing: gebruik patroonvalidatie om inconsistenties te vinden

 

// Deze datums zijn uit onze dataset gehaald
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Data opschonen in Java

Drie soorten patroonvalidatie

  • Volledige patroonmatch
    • Gebruik als het formaat exact moet zijn
    • Voorbeeld: datums valideren die d-MMM-yy volgen
  • Patroon zoeken
    • Gebruik als de exacte positie niet uitmaakt
    • Voorbeeld: productcategorieën vinden of checken in beschrijvingen
    • Producten met "Dark Chocolate": "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • Tekens matchen
    • Gebruik voor snelle datascreening
    • Voorbeeld: checken of een hoeveelheidveld letters bevat ("12.5x")
Data opschonen in Java

Patronen definiëren met regex

  • Match datumformaat d-MMM-yy (zoals "4-Jan-22")
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // 1-2 cijfers voor dag (zoals 4 of 27)
-            // letterlijk koppelstreepje

[A-Za-z]{3} // precies 3 letters voor maand zoals Jan; hoofd- of kleine letters - // letterlijk koppelstreepje
\\d{2} // precies 2 cijfers voor jaar (zoals 22)
Data opschonen in Java

Volledige patroonmatch

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

for (String date : dates) { // Check of date overeenkomt met datePattern boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " is geldig: " + isValid); }
Data opschonen in Java

Volledige patroonmatch: output

4-Jan-22 is geldig: true
1-Aug-22 is geldig: true
7-Jul-22 is geldig: true
27-Apr-22 is geldig: true
24/02/22 is geldig: false
Data opschonen in Java

Patroon zoeken

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

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // Staat monthPattern in date?
if (matcher.find()) { // Geeft true terug als het patroon is gevonden
// matcher.group() geeft de match terug System.out.println("Maand gevonden: " + matcher.group()); } else { System.out.println("Geen maand gevonden in: " + date); } }
Data opschonen in Java

Patroon zoeken: output

Maand gevonden: Jan
Maand gevonden: Aug
Maand gevonden: Jul
Maand gevonden: Apr
Geen maand gevonden in: 24/02/22
Data opschonen in Java

Tekens matchen

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // Controleer op cijfers in date
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// Controleer op letters (hoofd- en kleine) in date CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // Controleer op koppeltekens in date System.out.println(date + " heeft geldige tekens: " + isValid); }
Data opschonen in Java

Tekens matchen: output

4-Jan-22 heeft geldige tekens: true
1-Aug-22 heeft geldige tekens: true
7-Jul-22 heeft geldige tekens: true
27-Apr-22 heeft geldige tekens: true
24/02/22 heeft geldige tekens: false
Data opschonen in Java

Alles samenbrengen

// Definieer patroon d-MMM-yy, zoals 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Volledige patroonmatch (komt date overeen met datePattern?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Patroon zoeken (heeft date een maand-substring?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Tekens matchen (bevat date cijfers?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Data opschonen in Java

Laten we oefenen!

Data opschonen in Java

Preparing Video For Download...