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



这是我编写的代码。当我使用Scanner时,它工作得很好,但与BufferedReader不能正常工作。

这就是问题

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

  • 考虑一个具有实例字段名称、注册号和CGPA的类Student
  • 通过键盘将20名这样的学生的信息输入到Excel文件中
  • 按照注册号的顺序对文件的记录进行排序
  • 将文件的内容分成两半,并将每一半写入Excel文件

代码:

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();
}
}

输出屏幕截图

在我更改了您的代码行之后,您的代码对我来说很好——Windows 10上的JDK 11:

gpa = br.read();

到此:

gpa = br.readLine();

根据方法读取的javadoc,在类java.io.BufferedReader:中

读取单个字符。

Windows中的换行符实际上是两个字符,因此您实际上只是在while循环的最后部分读取一个字符,而忽略换行符,这些换行符会在while循环的下一次迭代开始时混淆第一个readLine调用。

这是完整的代码。

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正确地显示了文件——之后它向我显示了一个对话框窗口,其中显示了一条文件格式不合适的消息,并询问我是否仍要打开该文件。我说是的,那么写入Java程序中的文件的数据就会正确显示。当然,Excel猜测如何显示数据,这意味着它没有正确显示GPA。为了从Java创建一个格式正确的Excel文件,您需要使用像ApachePOI这样的库。

我会按照您的计划Scanner

public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("DA3.csv");
final String FMT = "%st%st%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();
}

最新更新