我正在创建此代码,其中扫描程序应扫描文本文件中的每个单词,然后继续将每个单词保存在特定数组中。但是每次扫描仪开始扫描时,它只到达下一行并停在第一个字。我不知道究竟是什么导致了这一点。我正在使用分隔符来分隔逗号“,”之间的单词。
这是一段代码:
package ex13a;
import java.util.Scanner;
import java.io.*;
/**
*
* @author Work
*/
public class Ex13a {
static Scanner scan = new Scanner(System.in);
static int[] number = new int[100];
static String[] f_users = new String[100];
static String[] l_users = new String[100];
static String[] passwd = new String[100];
static int i = 0;
static String fullName;
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
String path = "C:\\Users\\Work\\Desktop\\users.txt";
File inFile = new File(path);
Scanner inPut = new Scanner(inFile).useDelimiter(",");
Scanner inPut2 = new Scanner(inFile);
while(inPut.hasNext()){
System.out.println(number[i] = inPut.nextInt());
System.out.println(f_users[i] = inPut.next());
System.out.println(l_users[i] = inPut.next());
System.out.println(passwd[i] = inPut.next());
i++;
}
它引发了我的错误:
1
Ahmed
Dhaif
asdf56
Exception in thread "main" java.util.InputMismatchException
2
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at ex13a.Ex13a.main(Ex13a.java:32)
C:\Users\Work\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
答案 0 :(得分:1)
阅读错误消息。 nextInt()
方法引发了异常。来自documentation,nextInt()
InputMismatchException - if the next token does not match the Integer
regular expression, or is out of range
所以你正在阅读的令牌不是你想象的那样。您可以用其他内容替换nextInt()
来看看它是什么,然后从那里开始。
为了记录,这段代码非常信任
修改强>
我的猜测是有一些关于行不可打印的行,所以当你读它时它看起来像一个整数,但实际上就像^ r ###,其中“^ r”是控制代码和###是数字。
我敢打赌,如果您将hasNext()
更改为hasNextInt()
,它会在处理1行后停止。使用二进制编辑器读取文件以查看您真正阅读的内容。