Nettoyer des données en Java
Dennis Lee
Software Engineer
d-MMM-yy
// Nous avons extrait ces dates de notre ensemble de données
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22",
"27-Apr-22", "24/02/22");
d-MMM-yyd-MMM-yy (p. ex. « 4-Jan-22 »)\\d{1,2}-[A-Za-z]{3}-\\d{2}
\\d{1,2} // 1 à 2 chiffres pour le jour (p. ex. 4 ou 27) - // tiret littéral comme séparateur[A-Za-z]{3} // exactement 3 lettres pour le mois, comme Jan; majuscules ou minuscules - // tiret littéral comme séparateur\\d{2} // exactement 2 chiffres pour l'année (p. ex. 22)
import java.util.regex.Pattern;
// Correspond à d-MMM-yy Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");for (String date : dates) { // Vérifie si la date correspond à datePattern boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " is valid: " + isValid); }
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
import java.util.regex.Matcher;
Pattern monthPattern = Pattern.compile("[A-Za-z]{3}"); // 3 lettres comme « Jan »for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // monthPattern est-il dans date ?if (matcher.find()) { // Retourne true si le motif est trouvé// matcher.group() retourne le contenu correspondant System.out.println("Month found: " + matcher.group()); } else { System.out.println("No month found in: " + date); } }
Month found: Jan
Month found: Aug
Month found: Jul
Month found: Apr
No month found in: 24/02/22
import com.google.common.base.CharMatcher;
for (String date : dates) { boolean isValid = // Vérifier la présence de chiffres dans date CharMatcher.inRange('0', '9').matchesAnyOf(date) &&// Vérifier la présence de lettres (majuscules et minuscules) dans date CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&CharMatcher.is('-').matchesAnyOf(date); // Vérifier la présence de tirets dans date System.out.println(date + " has valid characters: " + isValid); }
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
// Définir le motif d-MMM-yy, comme 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Correspondance complète (la date correspond-elle à datePattern ?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Recherche de motif (la date contient-elle un sous-texte de mois ?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Correspondance de caractères (la date contient-elle des chiffres ?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Nettoyer des données en Java