Desen doğrulama

Java'da Veri Temizleme

Dennis Lee

Software Engineer

Neden desen doğrulamaya ihtiyaç var

  • Verilerin doğru olması için belirli formatları izlemesi gerekir
  • Örnek: tarihler tutarlı bir format izlemeli, ör. d-MMM-yy
  • Sorun: "24/02/22" gibi tutarsız tarih formatları
  • Çözüm: tutarsızlıkları bulmak için desen doğrulama kullanın

 

// Bu tarihleri veri setinden çıkardık
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Java'da Veri Temizleme

Üç tür desen doğrulama

  • Tam desen eşleşmesi
    • Format tam olmalıysa kullanın
    • Örnek: d-MMM-yy formatındaki tarihleri doğrulama
  • Desen bulma
    • Konum önemli değilse kullanın
    • Örnek: açıklamalarda ürün kategorilerini bulma/denetleme
    • "Dark Chocolate" içeren ürünler: "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • Karakter eşleştirme
    • Hızlı veri taraması için kullanın
    • Örnek: miktar alanında harf var mı kontrolü ("12.5x")
Java'da Veri Temizleme

Regex ile desen tanımlama

  • Tarih deseni d-MMM-yy ile eşleştirin ("4-Jan-22" gibi)
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // gün için 1-2 rakam (örn. 4 veya 27)
-            // düz tire ayırıcı

[A-Za-z]{3} // ay için tam 3 harf; büyük/küçük olabilir (Jan gibi) - // düz tire ayırıcı
\\d{2} // yıl için tam 2 rakam (örn. 22)
Java'da Veri Temizleme

Tam desen eşleşmesi

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

for (String date : dates) { // date, datePattern ile eşleşiyor mu kontrol et boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " geçerli mi: " + isValid); }
Java'da Veri Temizleme

Tam desen eşleşmesi: çıktılar

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
Java'da Veri Temizleme

Desen bulma

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

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // monthPattern date içinde mi?
if (matcher.find()) { // Desen bulunursa true döner
// matcher.group() eşleşen içeriği döndürür System.out.println("Ay bulundu: " + matcher.group()); } else { System.out.println("Ay bulunamadı: " + date); } }
Java'da Veri Temizleme

Desen bulma: çıktılar

Month found: Jan
Month found: Aug
Month found: Jul
Month found: Apr
No month found in: 24/02/22
Java'da Veri Temizleme

Karakter eşleştirme

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // date içinde rakam var mı?
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// date içinde harf (büyük/küçük) var mı? CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // tire var mı? System.out.println(date + " geçerli karakterlere sahip: " + isValid); }
Java'da Veri Temizleme

Karakter eşleştirme: çıktılar

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
Java'da Veri Temizleme

Hepsini bir araya getirme

// d-MMM-yy desenini tanımlayın, ör. 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Tam desen eşleşmesi (date, datePattern ile eşleşiyor mu?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Desen bulma (date içinde ay alt dizisi var mı?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Karakter eşleştirme (date içinde rakam var mı?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Java'da Veri Temizleme

Haydi pratik yapalım!

Java'da Veri Temizleme

Preparing Video For Download...