java.util.Scanner不会产生正确的结果

时间:2015-04-16 18:56:15

标签: java string date java.util.scanner

在下面的代码中,如果coverDate是" 2014年6月16日 - 6月29日",那么在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();

有人可以帮助我获得理想的结果吗?

2 个答案:

答案 0 :(得分:4)

调用scanner.hasNextInt()时,{(1}}将使用逗号在中解析,即下一个标记为29。因此29,将返回false。这是因为分隔符是空格。

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

scanner.hasNextInt()

答案 1 :(得分:2)

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

您可以使用useDelimiter()设置分隔符,该分隔符接受正则表达式。 我建议你使用\D分隔符,它代表“非数字”:

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