通过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 楼答案
Scanner
允许您指定输入将与之匹配的模式。如果匹配成功,您可以查询它。这是基本理念:如果你想要更新奇的东西,你可以使用命名组而不是参考数字。您还可以对输入添加额外的限制,使其成为一种合法的日期时间格式,但
LocalDateTime.of
无论如何都会解决这个问题,这让我想到关于异常处理的注意事项:在这种情况下,如果模式不匹配,就会按照请求抛出
IllegalStateException
。但是,如果(有效)格式中给出的数字没有意义,例如90
月份,那么LocalDateTime.of
将引发相同的异常。你可能想要单独捕捉DateTimeException