如何使用嵌套的for循环将数组值打印到CSV文件中?

3

我试图通过一个简单的方法来解决将数组打印到.csv文件并替换某些字符的问题,但是后来我注意到我的输出中不应该在逗号前后使用任何空格。
我不能使用replace,否则所有的标题标签也将没有空格,因此我需要帮助从我的嵌套for循环中直接获取值。

import java.io.*;
import java.util.Arrays;

public class HW01 {
    public static void main(String args[]) throws IOException {

        // Create a 1D array to hold header labels
        String headerLabels[] =  
            {"COURSE ID", "TEAM ID", "STUDENT FIRST NAME",
             "STUDENT LAST NAME", "STUDENT ID", "ASSIGNMENT ID",
             "DATE SUBMITTED", "TIME SUBMITTED", "SUBMITTED BY"
            };

        // Create a 2D array to hold header values
        String headerValues[][] =
            {
            {"CMPS280-02", "Invokers01", "James", "Brown", "w0479045", "H01", "8/25/2017", "1:14PM", "James Brown"},
            {"CMPS280-01", "Winners03", "Jacob", "Harley", "w0389342", "H03", "8/23/2017", "7:24PM", "Jacob Harley"},
            {"SE101-02", "CodeIt00", "Keith", "Dillinger", "w0782345", "S04", "8/25/2017", "1:23AM", "Keith Dillinger"}
            };

        // Create an int to hold number of students
        int students = headerValues.length;

        // Array loop to create student .csv files
        for (int i = 0; i < headerValues.length; i++){
            for (int j = 0; j < students; j++){

            // Create new .csv file and store in SUBMIT folder
            String path = "SUBMIT/"+headerValues[i][0]+"_"+headerValues[i][5]+"_"+headerValues[i][1]+"_"+headerValues[i][4]+".csv";
                File file = new File(path);
                PrintWriter writer = new PrintWriter(file);

                // Print headerLabels and headerValues for each student into .csv files
                writer.println(Arrays.toString(headerLabels).replace("[", "").replace("]", "").replace(" , " , ","));
                writer.println(Arrays.toString(headerValues[i]).replace("[", "").replace("]", "").replace("  ,  ", ","));
                writer.close();
            }
        }

    }
 }

首先,我可以告诉你Arrays.toString()不是你想要做的事情。 - OneCricketeer
如果你想在逗号上加入一个数组,请参见https://dev59.com/onI_5IYBdhLWcg3wHvU5 - OneCricketeer
我很快就意识到Arrays.toString()永远无法正确打印,但是我更喜欢使用嵌套的for循环而不是在逗号上连接数组,并且我的头脑有点困惑如何打印数组元素而不是字符串本身的语法。 - simplest
String.join() 内部使用循环。为什么要自己编写呢? - OneCricketeer
顺便说一句,我真的建议只使用Apache Commons CSV库。例如,Writer的JavaDoc https://commons.apache.org/proper/commons-csv/archives/1.4/apidocs/index.html - OneCricketeer
循环在我的作业中是必需的。这是我其中一门课程的要求,并且我必须使用循环来打印出信息。 - simplest
1个回答

0

嵌套循环并不是问题所在,问题在于你尝试编写内容的顺序。我猜你只想要一个文件来存储所有学生的信息,而不是i*j个文件,每个学生一个文件。

例如,

    // Create student .csv files and store in SUBMIT folder
    String path = "SUBMIT/students.csv";
    try (PrintWriter writer = new PrintWriter(new File(path))) {

        // Print header row
        writer.println(String.join(",", headerLabels));

        // Print all data rows
        for (String[] studentData : headerValues){
            writer.println(String.join(",", studentData);
        }
     }

这是我想做的,但是如上所述,我必须使用循环来编写信息。 - simplest
你仍然需要使用循环。for (String[] studentData : headerValues) - OneCricketeer
你可以编写自己的方法来替换 String.join。思路仍然相同,嵌套循环可以被抽象化。 - OneCricketeer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接