-2

你能帮我解决这个问题吗,我想添加来自 CSV 的 2 个整数并将其存储在 txtfile 中,但问题是它是字符串,如果我将其转换为整数,我会遇到很多错误。谢谢你们。 .

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class CSVReader {
public static void main (String[]arg)throws Exception {

    String readFile = "C:/Users/user/Desktop/student.csv";
    String writeFile = "C:/Users/user/Desktop/data.txt";

    // Read a comma-separated values (CSV) file.
    BufferedReader CSVFile = new BufferedReader (new FileReader(readFile));

    // Read line.
    String dataRow = CSVFile.readLine();

    // Create an array of student
    List<Student> students = new ArrayList <Student> ();


    // The while checks to see if the data is null. If
    // it is, we’ve hit the end of the file. If not,
    // process the data.
    while (dataRow !=null){
        String [] dataArray = dataRow.split(",");
        System.out.println(dataRow);
        Student student = new Student();
        student.setStudentName(dataArray[0]);
        student.setScore1(dataArray[1]);
        student.setScore2(dataArray[2]);
        students.add(student);
        dataRow = CSVFile.readLine();
        }

    // Close the file once all data has been read.
    CSVFile.close();

    StringBuilder sb = new StringBuilder();

    FileWriter fw = new FileWriter(writeFile);
    for (Student s : students){
        sb.append(s.studentName);
        System.out.println(s.studentName + " - " + (s.score1 + s.score2));

        // Writing to a text file.
        fw.write(sb.toString());
    }

    // Close the file once all data has been written.
    fw.close(); 
}

}

输出:

  che,cheche,chet
  100,100,100
  100,100,100
  null - 0
  null - 0
  null - 0

它应该是:

  che,cheche,chet
  100,100,100
  100,100,100
  che - 200
  cheche -200
  chet - 200
4

3 回答 3

1

如果您提供的信息是正确的,那么您遇到的主要问题是 CSV 数据是列格式,而不是典型的行格式。我的意思是第一行是名称,下一行是分数。数据的每个“列”都与同一索引处的“标题”匹配。

您的示例数据:

che, cheche, chet    -- row[0]
100, 100,    100     -- row[1]
100, 100,    100     -- row[2]

所以 row[0] 是名称,但是您正在解析数据,就好像一行的第一项是名称,第二项和第三项是分数 - 根据此示例数据,情况并非如此。

如果你想要分数,你需要为每一行获取正确的索引 - 所以 che 将是 row[1][0] 和 row[2][0]。

如果确实如此,那么您将需要处理第一行以获取名称,然后您将需要处理剩余的行以获取分数。

于 2013-03-14T12:02:33.397 回答
0

你可以试试

int number = Integer.parseInt("your string here");

例子:

   String one = "1";
   String two = "2";
   System.out.println(Integer.parseInt(one) + Integer.parseInt(two));
于 2013-03-14T10:37:08.203 回答
0

您在代码中犯了一些错误。

  1. 学生班级中的分数变量应该是整数。
  2. 要将字符串转换为 Integer,您需要使用 Integer.parseInt 方法。理想情况下,您的转换应该在您设置分值的阶段。
  3. 为什么要将学生对象添加到 ArrayList。不能直接写入文本文件吗?
于 2013-03-14T10:49:58.767 回答