Java useDelimiter和文件读取

时间:2014-03-21 04:01:54

标签: java

我对分隔符有疑问

在主要内部我有

    Scanner in= new Scanner(new File("num.txt"));
        in.useDelimiter("\\D"); 
        while(in.hasNext()){
    System.out.print(in.next());
    }

num.txt有

的地方
2,3,4
6,3,2
1,2,3

输出是234632123,但是当我改变" in.next()" to" in.nextInt()"我得到了

234Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at examTest.Testing.main(Testing.java:23)

如果in.next()输出234632123,那么in.nextInt()如何工作呢?

修改

如果我使用

in.useDelimiter("\\D+") 

而不是

in.useDelimiter("\\D")  

然后nextInt()将正确扫描数字

    Scanner in= new Scanner(new File("num.txt"));
       in.useDelimiter("\\D+"); 
       while(in.hasNext()){
    System.out.print(in.nextInt());
    }

但我仍然不知道为什么第一个版本不起作用

2 个答案:

答案 0 :(得分:1)

您需要更改它以检查下一个令牌中是否有int,然后拨打Scanner.nextInt()。你可以通过

来做到这一点
if(in.hasNextInt())
in.nextInt();

答案 1 :(得分:0)

你可以尝试这个,它适合我。

public static void main(String[] args)throws IOException {

        // TODO Auto-generated method stub

        Scanner in= new Scanner(new File("Experiment/src/test/java/example/num.txt"));
        in.useDelimiter("\\D"); 
         while(in.hasNextLine()){
            System.out.print(in.nextInt());
        }
    }

输出: - 234632123

尝试in.hasNextLine()而不是in.hasNext()。阅读Scanner.html#nextInt()

希望它会对你有所帮助。