Bắt đầu ngayBắt đầu miễn phí

Đọ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.timeNumberUtils đã đượ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

Xem khóa học

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 quantity bán hàng dưới dạng Integer.

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);
    }
}
Chỉnh sửa và Chạy Mã