扫描仪扫描第一行,仅扫描第二行的第一个输入

时间:2017-06-08 23:24:09

标签: java

我正在创建此代码,其中扫描程序应扫描文本文件中的每个单词,然后继续将每个单词保存在特定数组中。但是每次扫描仪开始扫描时,它只到达下一行并停在第一个字。我不知道究竟是什么导致了这一点。我正在使用分隔符来分隔逗号“,”之间的单词。

这是一段代码:

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)

1 个答案:

答案 0 :(得分:1)

阅读错误消息。 nextInt()方法引发了异常。来自documentationnextInt()

InputMismatchException - if the next token does not match the Integer
regular expression, or is out of range

所以你正在阅读的令牌不是你想象的那样。您可以用其他内容替换nextInt()来看看它是什么,然后从那里开始。

为了记录,这段代码非常信任

  1. 循环检查“是否有任何令牌”,然后假定它是一个 整数。
  2. 您认为如果有1个令牌,则每次循环迭代后还会有3个令牌。
  3. 没有对条目数量的保护,您认为它将是< = 100
  4. 修改

    我的猜测是有一些关于行不可打印的行,所以当你读它时它看起来像一个整数,但实际上就像^ r ###,其中“^ r”是控制代码和###是数字。

    我敢打赌,如果您将hasNext()更改为hasNextInt(),它会在处理1行后停止。使用二进制编辑器读取文件以查看您真正阅读的内容。