【问题标题】:java.util.Scanner does not yield correct resultjava.util.Scanner 没有产生正确的结果
【发布时间】:2015-06-23 09:16:07
【问题描述】:

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

有人可以帮我得到想要的结果吗?

【问题讨论】:

  • 只是一个猜测:也许29, 因为逗号而被解释为双精度(不是整数)?
  • 或者String
  • 有道理,我怎样才能得到想要的结果?

标签: java string date java.util.scanner


【解决方案1】:

当调用scanner.hasNextInt() 时,29 被解析伴随 和逗号,即下一个标记是29,。因此scanner.hasNextInt() 将返回 false。这是因为分隔符是空格。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多