扫描器nextInt()不返回字符串中的所有整数?

时间:2013-08-15 18:43:26

标签: java java.util.scanner

我有一个字符串currLine = "0 1435 " 3029 " "(1975.92)" " 72,304""(字符串中有引号),我想打印出currLine中的所有整数。但是使用下面的代码,我只打印出数字0。如何使用nextInt()以便打印出所有整数?

        Scanner scanLine = new Scanner(currLine);           
        while (scanLine.hasNext()) {
            if (scanLine.hasNextInt()) {
                System.out.println(scanLine.nextInt());
            }
            scanLine.next();
        }

3 个答案:

答案 0 :(得分:4)

只要Scanner遇到非int的内容,hasNextInt()就会返回false。更不用说你通过scanLine.next()循环底部的while调用跳过了一些有效的整数。您可以改为使用Matcher

Matcher m = Pattern.compile("\\d+").matcher(currLine);
while (m.find()) {
    System.out.println(m.group());
}
0
1435
3029
1975
92
72
304

答案 1 :(得分:1)

实际上,else字也丢失了。如果next()完成,则无需执行nextInt()

答案 2 :(得分:0)

我相信 next()一直到它看到一个空格。我会使用替换(“\”“,”“),用其他字符冲洗并重复,直到你有一串可以打印的整数。