Validasi pola

Pembersihan Data di Java

Dennis Lee

Software Engineer

Mengapa kita perlu validasi pola

  • Data harus mengikuti format tertentu agar akurat
  • Contoh: tanggal konsisten seperti d-MMM-yy
  • Masalah: format tanggal tidak konsisten seperti "24/02/22"
  • Solusi: gunakan validasi pola untuk menemukan format tidak konsisten

 

// Kami mengekstrak tanggal ini dari dataset
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Pembersihan Data di Java

Tiga jenis validasi pola

  • Pencocokan pola penuh
    • Gunakan saat format harus tepat
    • Contoh: memvalidasi tanggal dengan format d-MMM-yy
  • Pencarian pola
    • Gunakan saat posisi tidak harus tepat
    • Contoh: menemukan atau memeriksa kategori produk dalam deskripsi
    • Produk dengan "Dark Chocolate": "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • Pencocokan karakter
    • Gunakan untuk penyaringan data cepat
    • Contoh: memeriksa apakah kolom kuantitas berisi huruf ("12.5x")
Pembersihan Data di Java

Mendefinisikan pola dengan regex

  • Cocokkan pola tanggal d-MMM-yy (seperti "4-Jan-22")
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // 1-2 digit untuk hari (mis. 4 atau 27)
-            // tanda hubung literal

[A-Za-z]{3} // tepat 3 huruf untuk bulan seperti Jan; kapital atau kecil - // tanda hubung literal
\\d{2} // tepat 2 digit untuk tahun (mis. 22)
Pembersihan Data di Java

Pencocokan pola penuh

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

for (String date : dates) { // Periksa apakah date sesuai datePattern boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " valid: " + isValid); }
Pembersihan Data di Java

Pencocokan pola penuh: output

4-Jan-22 valid: true
1-Aug-22 valid: true
7-Jul-22 valid: true
27-Apr-22 valid: true
24/02/22 valid: false
Pembersihan Data di Java

Pencarian pola

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

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // Apakah monthPattern ada di date?
if (matcher.find()) { // Mengembalikan true jika pola ditemukan
// matcher.group() mengembalikan konten yang cocok System.out.println("Bulan ditemukan: " + matcher.group()); } else { System.out.println("Tidak ada bulan di: " + date); } }
Pembersihan Data di Java

Pencarian pola: output

Bulan ditemukan: Jan
Bulan ditemukan: Aug
Bulan ditemukan: Jul
Bulan ditemukan: Apr
Tidak ada bulan di: 24/02/22
Pembersihan Data di Java

Pencocokan karakter

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // Periksa digit pada date
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// Periksa huruf (kapital dan kecil) pada date CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // Periksa tanda hubung pada date System.out.println(date + " memiliki karakter valid: " + isValid); }
Pembersihan Data di Java

Pencocokan karakter: output

4-Jan-22 memiliki karakter valid: true
1-Aug-22 memiliki karakter valid: true
7-Jul-22 memiliki karakter valid: true
27-Apr-22 memiliki karakter valid: true
24/02/22 memiliki karakter valid: false
Pembersihan Data di Java

Menggabungkan semuanya

// Definisikan pola d-MMM-yy, seperti 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Pencocokan pola penuh (apakah date sesuai datePattern?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Pencarian pola (apakah date punya substring bulan?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Pencocokan karakter (apakah date punya digit?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Pembersihan Data di Java

Ayo berlatih!

Pembersihan Data di Java

Preparing Video For Download...