java - csvReader 在读取 csv 文件时跳过第一列每一行的第一个字母
问题描述
我用 Java 写了一个 csvReader 方法。一切似乎都工作正常,但它只是在打印值时跳过第一列中每一行的第一个字母。这是我的代码=>
public static void csvReader(String fileName) {
try {
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
List<Student> students = new ArrayList<>();
fileReader.readLine();
while (fileReader.read() > 0) {
String line = fileReader.readLine();
String[] tokens = line.split(COMMA_DELIMETER);
if (tokens.length > 0) {
Student student = new Student(tokens[0], tokens[1], Integer.valueOf(tokens[2]),
Integer.valueOf(tokens[3]));
students.add(student);
}
}
students.forEach(System.out::println);
} catch (Exception ex) {
ex.printStackTrace();
}
}
这里的“Student”只是一个 POJO 类,具有 firstName、lastName、id 和 age 字段。在我得到输出为 =>
Student details : ID = 101 first name = ikhil Last name = Chaurasia age = 28
Student details : ID = 102 first name = adhna Last name = Chaurasia age = 28
结果应该是这样的=>
Student details : ID = 101 first name = Nikhil Last name = Chaurasia age = 28
Student details : ID = 102 first name = Sadhna Last name = Chaurasia age = 28
csv文件内容如下所示:
toString 方法的实现如下所示:
public String toString() {
return "Student details : ID = "+id+ " first name = "+firstName+ " Last name = "+lastName+ " age = "+age;
}
任何帮助将不胜感激。谢谢
解决方案
问题在于您的while
循环条件:fileReader.read() > 0
.
每次调用它时都会读取一个字符(例如'N','S'),这会导致后续调用readLine
跳过第一个字符。
相反,只需使用以下命令检查条件readLine
:
String line;
while ((line = fileReader.readLine()) != null) {
String[] tokens = line.split(COMMA_DELIMETER);
// do the rest of the stuff
}
推荐阅读
- php - sudo apt-get install php5-xsl 给出 403 Forbidden 错误
- php - Yii2:filterModel的GridView“必须是整数”错误
- sql - 执行 SP 时从表中获取值
- java - 用 jna 加载 lib .so
- javascript - 在 Angular 5 应用程序中获取请求抛出 404 错误
- r - 对数据框进行排序并创建新列,按 id 显示连续输赢
- html - Microsoft Edge 浏览器不显示表格边框
- c# - 如何从 cshtml 表单获取数据并使用 Razor Pages c# 将其写入 txt 文件
- c# - 为什么我在 MVC 应用程序的部分视图中出现字典错误?
- matlab - 以字符串形式获取对象句柄(MATLAB)