java.util.Scanner 没有产生正确的结果

java.util.Scanner does not yield correct result

在下面的代码中,如果 coverDate 是 "June 16 - June 29, 2014",那么在 while 循环结束时日期数组有 [16, 2014]。应该是 [16, 29, 2014]

Scanner scanner = new Scanner(coverDate);
List<Integer> dates = new ArrayList<Integer>(); 

while(scanner.hasNext()) {
    if (scanner.hasNextInt()) {
        dates.add(scanner.nextInt());
    } else {
        scanner.next();
    }
 }

scanner.close();

谁能帮我得到想要的结果?

当调用scanner.hasNextInt()时,29一起用逗号解析,即下一个标记是29,。因此 scanner.hasNextInt() 会 return 错误。这是因为分隔符是空格。

解决这个问题的一种 hacky 方法是调整分隔符以包含逗号:

scanner.useDelimiter("[\p{javaWhitespace}+,]");

扫描仪使用空格作为默认分隔符。 在您的情况下,逗号与数字 29 一起使用,因此此标记不被视为有效数字。

您可以使用 useDelimiter() 设置分隔符,它接受正则表达式。 我建议你使用 \D 分隔符,它代表 "non-digit" :

Scanner scanner = new Scanner(coverDate).useDelimiter("\D");