java—在包含不同信息的txt文件中扫描比较困难

djmepvbi  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(308)

我有一个文本文件,其中包含一个姓名列表和一个以下表格中的书籍列表:

5
Prisoner Azkaban
J. k. Rowling
Eragon
Christopher Paolini
Ulysses
James Joyce
Of mice and men
John Steinbeck
War and peace
Leo Tolstoy
4
Craig David
Isabel Campbell
Lee Rinaldo
Bethany Waters

这些数字告诉您数字后面有多少个“对象”,从book name>author开始循环,然后这个模式停止在列出用户名的users部分重复。
下面是我对代码的尝试:

Scanner inFile = new Scanner(new FileReader("C:\\Users\\finla\\IdeaProjects\\Untitled1\\src\\books2.txt"));

    int numberOfBooks = inFile.nextInt();

    for (int i= 0; i <= numberOfBooks; i++){
        String bookName =  inFile.nextLine();
        System.out.println("Book name: " + bookName);
        String bookAuthor = inFile.nextLine();
        System.out.println("Book author: " + bookAuthor);
    }
    int numberOfUsers = inFile.nextInt();
    for (int i= 0; i <= numberOfUsers; i++){
        String userName =  inFile.nextLine();
        System.out.println("User name: " + userName);

    }

以下是输出:

Book name: 
Book author: Prisoner Azkaban
Book name: J. k. Rowling
Book author: Eragon
Book name: Christopher Paolini
Book author: Ulysses
Book name: James Joyce
Book author: Of mice and men
Book name: John Steinbeck
Book author: War and peace
Book name: Leo Tolstoy
Book author: 4

这本书的作者给我贴错了标签。循环不应该在最后打印出4。我希望能在名单的最后读到人。你对我的代码为什么不起作用有什么建议吗?我尝试过使用next()而不是nextline(),但这并不能解决问题,只能从每行中获取第一个字符串。

qmelpv7a

qmelpv7a1#

开头空行:
当你使用 inFile.nextInt(); 它只获取int,不使用行尾的换行符 \n .
有几种方法可以解决此问题,其中一种方法是使用整行并将其解析为int,例如:

int numberOfBooks = Integer.parseInt(inFile.nextLine());

否则,您只需在使用nextint用完行的其余部分后使用空白nextline调用即可:

int numberOfBooks = inFile.nextInt();
inFile.nextLine();

结尾处的附加行:
你的循环运行了额外的时间,因为 <= ,记住循环从0开始,所以正确的方法是使用 < :

for (int i= 0; i < numberOfBooks; i++){
    ...
}
biswetbf

biswetbf2#

您希望for循环从0到<计数,或者从1到计数,如下所示:

for (int i= 0; i < numberOfBooks; i++){
}

你有<=,这意味着你消耗了1行太多。

相关问题