有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过Scannerinput的java LocalDateTime

我需要从Scanner插入一个LocalDateTime。 我们需要使用输入格式

dd.MM. HH:mm

对于Scanner(不使用额外的变量!),如何将这些扫描的值放入start变量

Scanner sc = new Scanner(System.in); 
System.out.println("Year:");
int year = sc.nextInt(); 

System.out.println("Start:");
//--- (?) scan something like dd.MM. HH:mm --- 
start = LocalDateTime.of(year, month, dayOfMonth, hour, minute)

如果扫描的输入不是dd.MM. HH:mm格式,程序应该抛出IllegalArgumentException。我知道这是怎么回事,只是想让你知道我们不能使用sc.next()getsubstring()


共 (1) 个答案

  1. # 1 楼答案

    Scanner允许您指定输入将与之匹配的模式。如果匹配成功,您可以查询它。这是基本理念:

    public class Example {
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
            System.out.println("Year:");
            int year = sc.nextInt();
    
            System.out.println("Date-time in format: dd.MM. HH:mm");
            sc.nextLine();
            sc.findInLine("(\\d\\d)\\.(\\d\\d)\\. (\\d\\d):(\\d\\d)");
            try {
                MatchResult mr = sc.match();
                int month = Integer.parseInt(mr.group(2));
                int day = Integer.parseInt(mr.group(1));
                int hour = Integer.parseInt(mr.group(3));
                int minute = Integer.parseInt(mr.group(4));
                LocalDateTime dt = LocalDateTime.of(year, month, day, hour, minute);
                System.out.println(dt);
            } catch (IllegalStateException e) {
                System.err.println("Invalid date-time format.");
            }
        }
    }
    

    如果你想要更新奇的东西,你可以使用命名组而不是参考数字。您还可以对输入添加额外的限制,使其成为一种合法的日期时间格式,但LocalDateTime.of无论如何都会解决这个问题,这让我想到

    关于异常处理的注意事项:在这种情况下,如果模式不匹配,就会按照请求抛出IllegalStateException。但是,如果(有效)格式中给出的数字没有意义,例如90月份,那么LocalDateTime.of将引发相同的异常。你可能想要单独捕捉DateTimeException