Java 在csv中并排打印两个阵列

Java 在csv中并排打印两个阵列,java,arrays,csv,for-loop,foreach,Java,Arrays,Csv,For Loop,Foreach,我有两个字符串数组:句子和分数 我想创建一个.csv文件,其中第一列由句子中的元素组成,第二列由score中的元素组成 我很难理解代码中的问题在哪里以及如何解决它 import java.io.File; import java.io.PrintWriter; public class GeneraCsv { public static void main(String[] args) throws Exception { String[] sentence = {"s

我有两个字符串数组:句子和分数

我想创建一个.csv文件,其中第一列由句子中的元素组成,第二列由score中的元素组成

我很难理解代码中的问题在哪里以及如何解决它

import java.io.File;
import java.io.PrintWriter;

public class GeneraCsv {
    public static void main(String[] args) throws Exception {
        String[] sentence = {"sentence 1", "sentence 2", "sentence 3"};
        String[] score = {"score 1", "score", "score 3"};
        PrintWriter pw = new PrintWriter(new File("C:/Users/Gonzalo/Desktop/test.csv"));
        StringBuilder sb = new StringBuilder();
        sb.append("sentence");
        sb.append(';');
        sb.append("score");
        sb.append('\n');
        for(String a: sentence) {
            sb.append(a);
            sb.append(";");
            for(String b: score) {
                sb.append(b);
                sb.append('\n');
                break;
            }
        }
        pw.write(sb.toString());
        pw.close();
        System.out.println("done!");
    }
}
我的代码生成以下内容:

sentence; score
sentence 1; score 1
sentence 2; score 1
sentence 3; score 1
第一列可以,第二列不行

我想要的输出应该是:

sentence; score
sentence 1; score 1
sentence 2; score 2
sentence 3; score 3
我肯定在某个地方的循环中存在问题

如何修复?

问题

您总是在内部循环中使用分数的第一个输入

for(String a: sentence) { 
            sb.append(a); // this will iterate the sentence array in sequential order
            sb.append(";");

            for(String b: score) {
              // this will always pick score 1 because there will be only one iteration due to break
                sb.append(b);
                sb.append('\n');
                break; // stop the loop after first iteration
            }
        }
所以用这个

一,。使用索引根据数组长度迭代数组

二,。使用索引访问数据并将其附加到StringBuilder


@Pavneethingh的答案是解决您的问题的短期解决方案,并且会起作用

但是更好的方法是将您的设计从2个独立的数组更改为与自定义类结合使用的单个数组。这就是为什么我们称Java为面向对象的语言

此解决方案如下所示:

class SentenceScore{
  private final Sting sentence;
  private final int score;
  SentenceScore(Sting sentence, int score){
    this.sentence  =  sentence;
    this.score  =  score;
  }

  @Override
  public String toString(){
    return "sentence: "+sentence+"; score: "+score;
  }
}

for(SentenceScore sentenceScore : sentenceScores){
    sb.append(a); 
    sb.append(System.getProperty("line.separator"));
}

如果你想要第二句话;输出中的分数2,您需要更改初始化,因为只有分数,而不是分数2。@RO_工程师似乎是输入错误,应该是分数1,分数2,分数3和NoobNw0你只想打印分数和句子,然后让我知道这可以在远优化完成way@RO_engineer好眼力,仅供参考:CSV表示逗号分隔的值;不是逗号。事实上,这是一个拼写错误,对不起@安德烈亚斯:你说得对,但对我来说,逗号不能用作分隔符,而分号可以用作分隔符。我认为这是某种区域性的背景,明白了。谢谢@NoobNe0我很高兴,我能帮上忙,很高兴编码这也很有趣,使用了一些方法重写。我很快就要试一试了
sentence 1;score 1    
sentence 2;score    
sentence 3;score 3
class SentenceScore{
  private final Sting sentence;
  private final int score;
  SentenceScore(Sting sentence, int score){
    this.sentence  =  sentence;
    this.score  =  score;
  }

  @Override
  public String toString(){
    return "sentence: "+sentence+"; score: "+score;
  }
}

for(SentenceScore sentenceScore : sentenceScores){
    sb.append(a); 
    sb.append(System.getProperty("line.separator"));
}