Làm sạch dữ liệu bằng Java
Dennis Lee
Software Engineer
d-MMM-yy
// Chúng tôi trích xuất các ngày này từ tập dữ liệu
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 (như "4-Jan-22")\\d{1,2}-[A-Za-z]{3}-\\d{2}
\\d{1,2} // 1-2 chữ số cho ngày (như 4 hoặc 27) - // dấu gạch nối[A-Za-z]{3} // đúng 3 chữ cho tháng như Jan; hoa hoặc thường - // dấu gạch nối\\d{2} // đúng 2 chữ số cho năm (như 22)
import java.util.regex.Pattern;
// Khớp d-MMM-yy Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");for (String date : dates) { // Kiểm tra date có khớp datePattern không boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " hợp lệ: " + isValid); }
4-Jan-22 hợp lệ: true
1-Aug-22 hợp lệ: true
7-Jul-22 hợp lệ: true
27-Apr-22 hợp lệ: true
24/02/22 hợp lệ: false
import java.util.regex.Matcher;
Pattern monthPattern = Pattern.compile("[A-Za-z]{3}"); // 3 chữ như "Jan"for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // monthPattern có trong date không?if (matcher.find()) { // Trả về true nếu tìm thấy mẫu// matcher.group() trả về nội dung khớp System.out.println("Tìm thấy tháng: " + matcher.group()); } else { System.out.println("Không tìm thấy tháng trong: " + date); } }
Tìm thấy tháng: Jan
Tìm thấy tháng: Aug
Tìm thấy tháng: Jul
Tìm thấy tháng: Apr
Không tìm thấy tháng trong: 24/02/22
import com.google.common.base.CharMatcher;
for (String date : dates) { boolean isValid = // Kiểm tra chữ số trong date CharMatcher.inRange('0', '9').matchesAnyOf(date) &&// Kiểm tra chữ cái (hoa và thường) trong date CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&CharMatcher.is('-').matchesAnyOf(date); // Kiểm tra dấu gạch nối trong date System.out.println(date + " có ký tự hợp lệ: " + isValid); }
4-Jan-22 có ký tự hợp lệ: true
1-Aug-22 có ký tự hợp lệ: true
7-Jul-22 có ký tự hợp lệ: true
27-Apr-22 có ký tự hợp lệ: true
24/02/22 có ký tự hợp lệ: false
// Định nghĩa mẫu d-MMM-yy, như 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// Khớp toàn bộ mẫu (date có khớp datePattern không?)
boolean matchesPattern = datePattern.matcher(date).matches();
// Tìm mẫu (date có chuỗi tháng không?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// Khớp ký tự (date có chữ số không?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Làm sạch dữ liệu bằng Java