我对分隔符有疑问
在主要内部我有
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());
}
但我仍然不知道为什么第一个版本不起作用
答案 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()
希望它会对你有所帮助。