Java如何将ArrayList存储的输入分割为日期和字符串并进行比较
完整实现代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.Locale; // 任务实体类,用于统一存储日期和任务内容 class Task { private LocalDate date; private String content; public Task(LocalDate date, String content) { this.date = date; this.content = content; } public LocalDate getDate() { return date; } public String getContent() { return content; } } public class TestClass { // 全局日期格式化器,指定格式+英文Locale适配英文月份缩写解析 private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("d MMM yyyy", Locale.ENGLISH); public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList<Task> taskList = new ArrayList<>(); // 获取系统当前日期 LocalDate today = LocalDate.now(); try { System.out.println("Enter : "); String input = br.readLine(); // 限制拆分次数为2,避免任务内容含逗号时拆分出错 String[] parts = input.split(",", 2); if (parts.length != 2) { System.out.println("输入格式错误,请按照「日期, 任务」格式输入"); return; } // 解析输入的日期,去除首尾空格 LocalDate taskDate = LocalDate.parse(parts[0].trim(), DATE_FORMATTER); String taskContent = parts[1].trim(); // 存入任务列表 taskList.add(new Task(taskDate, taskContent)); // 检索匹配当日的任务 System.out.println("--------------"); boolean hasTodayTask = false; for (Task task : taskList) { if (task.getDate().isEqual(today)) { System.out.println("今日任务:" + task.getContent()); hasTodayTask = true; break; } } if (!hasTodayTask) { System.out.println("当前日期无任务"); } } catch (IOException e) { System.out.println("输入读取失败:" + e.getMessage()); } catch (DateTimeParseException e) { System.out.println("日期格式错误,请按照 D MMM YYYY 格式输入,例如 10 Nov 2021"); } } }
关键实现说明
- 用
java.time包下的LocalDate处理日期,避免传统Date类的线程安全、格式转换复杂问题 - 日期格式化器显式指定
Locale.ENGLISH,保证中文环境下也能正常解析英文月份缩写 - 新增输入格式、日期格式的异常捕获逻辑,容错性更高
- 拆分输入时限制拆分次数为2,支持任务内容中包含逗号的场景
内容的提问来源于stack exchange,提问作者mrwahl
相关产品推荐
相关产品推荐

