使用substring方法做日期格式转换时如何处理错误输入?
实现方案
- 核心处理逻辑用
try-catch包裹,捕获解析过程中所有可能的异常(索引越界、数字格式错误等),捕获到异常后直接跳过当前输入项,继续下一轮循环 - 先修复原代码的基础错误:字符串类型不能直接和整数
-1做相等判断,改为约定输入-1作为终止循环的标记 - 可增加前置校验步骤,提前判断输入是否包含必要的空格、逗号,长度是否满足取4位年份的要求,减少异常触发概率
修正后代码
import java.util.Scanner; public class DateParser { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); String lineString = ""; // 如果需要把英文月份转成数字输出可以开启下面的月份映射,不需要直接删除即可 // String[] monthArr = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; System.out.println("请输入日期(格式:Month Day, Year,输入-1退出):"); while (scnr.hasNextLine()) { lineString = scnr.nextLine().trim(); // 输入-1时退出循环 if ("-1".equals(lineString)) { break; } try { // 前置校验 int spaceIndex = lineString.indexOf(" "); int commaIndex = lineString.indexOf(","); if (spaceIndex == -1 || commaIndex == -1 || lineString.length() < commaIndex + 5) { throw new IllegalArgumentException("格式不符合要求"); } // 字段截取均使用substring实现,符合要求 String month = lineString.substring(0, spaceIndex); // 若需转数字月份,加这行即可:int monthNum = Arrays.asList(monthArr).indexOf(month) + 1; int day = Integer.parseInt(lineString.substring(spaceIndex + 1, commaIndex).trim()); int year = Integer.parseInt(lineString.substring(commaIndex + 1).trim()); // 输出要求格式 Month/Day/Year System.out.printf("%s/%d/%d%n", month, day, year); } catch (Exception e) { // 任意错误都跳过当前项,继续下一轮 System.out.printf("输入内容【%s】格式错误,已跳过%n", lineString); } } scnr.close(); } }
逻辑说明
- 任意步骤出错(找不到空格/逗号、日期年份不是数字、长度不足等)都会进入catch块,打印错误提示后自动进入下一轮循环,不会终止程序
- 所有字段截取均使用
substring方法实现,满足要求 - 输入校验覆盖了无逗号、无空格、年份长度不足、日期非数字等常见错误场景
内容的提问来源于stack exchange,提问作者Jaden Perleoni
相关产品推荐
相关产品推荐

