【问题标题】:Concatenate a List<string> to end of array in Java将 List<string> 连接到 Java 中的数组末尾
【发布时间】:2021-08-30 14:24:15
【问题描述】:

我有这个代码:

public class Test3 {

public static void main(String[] args) throws IOException {
    List<String> answers = new ArrayList<>();
    answers.add("Yes");
    answers.add("No");
    try (BufferedReader br = new BufferedReader(new FileReader("D://new.csv"))) {
        String line;
        while ((line = br.readLine()) != null) {
            for (int i = 0; i < answers.size(); i++) {
                String[] sae = line.split(",");
                sae = Arrays.copyOf(sae, sae.length + 1);
                sae[sae.length - 1] = answers.get(i);
                System.out.println(Arrays.toString(sae));
            }

        }
    }
}

} 输出为:

["something", "hello", Yes]
["something", "hello", No]
["abc", "bye", Yes]
["abc", "bye", No]

我正在读取一个 csv 文件并将其拆分。我通过 for 循环连接 list&lt;string&gt;,但最后我得到了 list&lt;string&gt; 两次。我怎样才能阻止它这样做?

我想要的输出是:

["something", "hello", Yes]
["abc", "bye", No]

【问题讨论】:

    标签: java eclipse list csv concatenation


    【解决方案1】:

    您正在为 .csv 文件中的每一行遍历整个 answers 数组。

    public static void main(String[] args) throws IOException {
        List<String> answers = new ArrayList<>();
        answers.add("Yes");
        answers.add("No");
        try (BufferedReader br = new BufferedReader(new FileReader("new.csv"))) {
            String line;
            int i = 0;
            while ((line = br.readLine()) != null) {
                String[] sae = line.split(",");
                sae = Arrays.copyOf(sae, sae.length + 1);
                sae[sae.length - 1] = answers.get(i%answers.size());
                System.out.println(Arrays.toString(sae));
            }
        }
    }
    

    Lukas Resch 提到了一个很好的答案,这是它的代码。

    【讨论】:

      【解决方案2】:

      您可以创建一个计数器并在每次读取一行时递增它:

      • 如果 csv 中的行与答案中的行匹配:

        sae[sae.length - 1] = answers.get(counter);

      • 否则你可能想从头开始:

        sae[sae.length - 1] = answers.get(counter % answers.size());

      删除你的for循环,你不需要它

      【讨论】:

      • 谢谢。对不起,我没有这个主意
      • 有什么办法可以跳过 csv 的第一行,因为它包含标题?
      • 当然.. 在你的 while 之前添加 br.readLine()
      猜你喜欢
      • 2013-06-22
      • 2021-09-18
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      相关资源
      最近更新 更多