在下面的代码中,如果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();
有人可以帮助我获得理想的结果吗?
答案 0 :(得分:4)
调用scanner.hasNextInt()
时,{(1}}将使用逗号在中解析,即下一个标记为29
。因此29,
将返回false。这是因为分隔符是空格。
解决问题的一种方法是调整分隔符以包含逗号:
scanner.hasNextInt()
答案 1 :(得分:2)
扫描程序使用空格作为默认分隔符。 在您的情况下,逗号使用数字29,因此该标记不被视为有效数字。
您可以使用useDelimiter()
设置分隔符,该分隔符接受正则表达式。
我建议你使用\D
分隔符,它代表“非数字”:
Scanner scanner = new Scanner(coverDate).useDelimiter("\\D");