如何使用扫描仪存储逗号分隔的参数

时间:2015-07-08 19:31:38

标签: java

我正在使用扫描仪进行用户输入,并希望存储从命令行给出的2个参数,但我怎么只能得到一个。 另外我相信如果有nextInt,hasNextInt()会返回布尔值,但是当我输入非int值时,它不会破坏循环。

在发布此问题之前,我已经在线查看了源码和stackoverflow,但没有得到我想要的内容。

Scanner s = new Scanner(System.in);

int first = 0;
int second = 0;
System.out.println("Please enter number: ");
s.useDelimiter(",");
while (s.hasNextInt()) {
    first = s.nextInt();
    System.out.print("firstArgument: " + first + "\n");
    second = s.nextInt();
    System.out.print("secondArgument: " + second + "\n");
}

1 个答案:

答案 0 :(得分:2)

问题是您的代码为每个奇数编号的输入调用s.hasNextInt(),但它尝试在不执行检查的情况下获取每个偶数编号的输入。因此,它需要这样的输入:

1,2,3,4,5,6,done
1,2,3,4,done
1,2,done

但是,像这样的输入会导致异常:

1,2,3,4,5,done
1,2,3,done
1,done

请注意,非数字输入必须出现在同一行的逗号之后。

要解决此问题,请在读取第二个值之前添加一个检查:

while (s.hasNextInt()) {
    first = s.nextInt();
    if (!s.hasNextInt()) break'
    second = s.nextInt();
    System.out.print("firstArgument: " + first + "\n");
    System.out.print("secondArgument: " + second + "\n");
}

如果您希望允许其他字符(例如行尾标记)结束以逗号分隔的列表,请为分隔符使用不同的表达式:

s.useDelimiter("[,\n]");