Validarea tiparelor

Curățarea datelor în Java

Dennis Lee

Software Engineer

De ce avem nevoie de validarea tiparelor

  • Datele trebuie să respecte formate specifice pentru a fi corecte
  • Exemplu: datele calendaristice ar trebui să urmeze un format consistent, precum d-MMM-yy
  • Problemă: formate inconsistente, precum "24/02/22"
  • Soluție: utilizarea validării tiparelor pentru a identifica formatele inconsistente

 

// Am extras aceste date din setul de date
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Curățarea datelor în Java

Trei tipuri de validare a tiparelor

  • Potrivire completă a tiparului
    • Utilizată când formatul trebuie să fie exact
    • Exemplu: validarea datelor calendaristice cu formatul d-MMM-yy
  • Căutarea tiparului
    • Utilizată când poziția exactă nu contează
    • Exemplu: găsirea categoriilor de produse în descrieri
    • Produse cu "Dark Chocolate": "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • Potrivirea caracterelor
    • Utilizată pentru filtrarea rapidă a datelor
    • Exemplu: verificarea dacă un câmp de cantitate conține litere ("12.5x")
Curățarea datelor în Java

Definirea tiparelor cu regex

  • Potrivire cu tiparul de dată d-MMM-yy (ex. "4-Jan-22")
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // 1-2 cifre pentru zi (ex. 4 sau 27)
-            // separator cratimă literal

[A-Za-z]{3} // exact 3 litere pentru lună, ex. Jan; majuscule sau minuscule - // separator cratimă literal
\\d{2} // exact 2 cifre pentru an (ex. 22)
Curățarea datelor în Java

Potrivirea completă a tiparului

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

for (String date : dates) { // Verificare dacă data corespunde cu datePattern boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " is valid: " + isValid); }
Curățarea datelor în Java

Potrivirea completă a tiparului: rezultate

4-Jan-22 is valid: true
1-Aug-22 is valid: true
7-Jul-22 is valid: true
27-Apr-22 is valid: true
24/02/22 is valid: false
Curățarea datelor în Java

Căutarea tiparelor

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

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // Este monthPattern în date?
if (matcher.find()) { // Returnează true dacă tiparul este găsit
// matcher.group() returnează conținutul potrivit System.out.println("Month found: " + matcher.group()); } else { System.out.println("No month found in: " + date); } }
Curățarea datelor în Java

Căutarea tiparelor: rezultate

Month found: Jan
Month found: Aug
Month found: Jul
Month found: Apr
No month found in: 24/02/22
Curățarea datelor în Java

Potrivirea caracterelor

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // Verificare cifre în dată
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// Verificare litere (majuscule și minuscule) în dată CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // Verificare cratime în dată System.out.println(date + " has valid characters: " + isValid); }
Curățarea datelor în Java

Potrivirea caracterelor: rezultate

4-Jan-22 has valid characters: true
1-Aug-22 has valid characters: true
7-Jul-22 has valid characters: true
27-Apr-22 has valid characters: true
24/02/22 has valid characters: false
Curățarea datelor în Java

Sinteză

// Definire tipar d-MMM-yy, ex. 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Potrivire completă (data corespunde cu datePattern?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Căutare tipar (data conține un subșir de tip lună?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Potrivire caractere (data conține cifre?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Curățarea datelor în Java

Să exersăm!

Curățarea datelor în Java

Preparing Video For Download...