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");
在下面的代码中,如果 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");