Đọc tệp CSV một cách an toàn
Bạn đã sẵn sàng đọc một tệp CSV về doanh số cà phê. Hãy dùng các hàm kiểm tra dữ liệu để đọc dữ liệu và xác thực kiểu dữ liệu.
Các gói cần thiết như java.time và NumberUtils đã được nhập sẵn cho bạn.
Bài tập này là một phần của khóa học
Làm sạch dữ liệu bằng Java
Hướng dẫn bài tập
- Phân tích cú pháp chuỗi ngày theo định dạng
M/d/yy. - Đọc
quantitybán hàng dưới dạngInteger.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
public class CoffeeSalesExample {
private record CoffeeSales(LocalDate date, String coffeeName, String paymentMethod, Integer quantity, Double amount) {}
private static LocalDate parseDate(String dateStr) {
// Parse the format of the date string
return ____.____(dateStr, DateTimeFormatter.ofPattern("M/d/yy"));
}
private static String validateNumeric(String value) {
if (NumberUtils.isParsable(value)) return value;
throw new IllegalArgumentException("Invalid: " + value);
}
public static double parsePrice(String priceText) {
if (NumberUtils.isParsable(priceText.replace("$", ""))) {
return Double.parseDouble(priceText.replace("$", ""));
}
throw new IllegalArgumentException("Invalid price: " + priceText);
}
public static CoffeeSales parseSalesData(String[] fields) {
LocalDate publishDate = parseDate(fields[0]);
String coffeeName = fields[1];
String paymentMethod = fields[2];
// Read quantity as an Integer
Integer quantity = ____.____(validateNumeric(fields[3]));
Double amount = parsePrice(fields[4]);
return new CoffeeSales(publishDate, coffeeName, paymentMethod, quantity, amount);
}
public static void main(String[] args) throws IOException, InterruptedException {
List sales = new ArrayList<>();
String filename = "coffee.csv";
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line = reader.readLine();
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
sales.add(parseSalesData(fields));
}
}
sales.forEach(System.out::println);
}
}