You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:01