我正在使用 BufferedReader 将字符串值输入到 Excel 文件中,但在下一次迭代中它会跳过第一个字符串的条目

I'm using BufferedReader to input string values into the Excel file but in the next iteration it's skipping the entry of the first string

这是我写的代码。它在我使用 Scanner 时工作正常,但在使用 BufferedReader.

时无法正常工作

这是问题

根据以下规范开发和测试程序。

代码:

package com.hitesh;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Student {

    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("DA3.xls");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String name;
        String registrationNo;
        float gpa;

        int n = 0;
        Scanner scanner = new Scanner(System.in);
        fw.write("Student Name" + '\t' + "Registration No" + '\t' + "GPA" + '\n');
        while (n < 3)
        {
            System.out.print("Enter Student Name: ");
            name = br.readLine();
//            name = scanner.next();
            System.out.print("Enter registration number: ");
            registrationNo = br.readLine();
//            registrationNo = scanner.next();
            System.out.print("Enter GPA: ");
            gpa = br.read();
//            gpa = scanner.nextFloat();
            fw.write(name + '\t' + registrationNo + '\t' + gpa + '\n');
            n++;
        }
        fw.close();
    }
}

Output Screenshot

我会Scanner如你所愿:

    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("DA3.csv");
        final String FMT = "%s\t%s\t%s%n";

        String name;
        String registrationNo;
        float gpa;

        int n = 0;
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter("\R");
        fw.write(String.format(FMT, "Student Name", "Registration No", "GPA"));
        while (n < 3) {
            System.out.print("Enter Student Name: ");
            name = scanner.next();
            System.out.print("Enter registration number: ");
            registrationNo = scanner.next();
            System.out.print("Enter GPA: ");
            gpa = scanner.nextFloat();
            fw.write(String.format(FMT, name, registrationNo, gpa));
            n++;
        }

        fw.close();
    }

您的代码对我来说工作正常 – JDK 11 on Windows 10 – 在我更改了您的这行代码之后:

gpa = br.read();

对此:

gpa = br.readLine();

根据方法 readjavadoc,在 class java.io.BufferedReader:

Reads a single character.

Windows 中的换行符实际上是两个字符,因此您实际上只是在 while 循环的最后部分读取一个字符,而忽略弄乱第一个 [=15] 的换行符=] 在 while 循环的下一次迭代开始时调用。

这是完整的代码。

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class Student {

    public static void main(String[] args) throws IOException {
        try (FileWriter fw = new FileWriter("DA3.xls");
             InputStreamReader isr = new InputStreamReader(System.in);
             BufferedReader br = new BufferedReader(isr)) {
            fw.write("Student Name" + '\t' + "Registration No" + '\t' + "GPA" + '\n');
            int n = 0;
            while (n < 3) {
                System.out.print("Enter student name: ");
                String name = br.readLine();
                System.out.print("Enter registration number: ");
                String registrationNo = br.readLine();
                System.out.print("Enter GPA: ");
                String gpa = br.readLine();
                fw.write(name + "\t" + registrationNo + "\t" + gpa + "\n");
                n++;
            }
        }
    }
}

并且 Excel 正确显示文件 – 在它向我显示一个对话框 window 并显示文件格式不合适的消息并询问我是否仍要打开该文件之后。我说是,并且正确显示了写入 Java 程序中的文件的数据。 Of-course Excel 猜测如何显示数据,这意味着它没有正确显示 GPA。为了从 Java 创建格式正确的 Excel 文件,您需要使用像 Apache POI.

这样的库