Java 在csv中并排打印两个阵列
我有两个字符串数组:句子和分数 我想创建一个.csv文件,其中第一列由句子中的元素组成,第二列由score中的元素组成 我很难理解代码中的问题在哪里以及如何解决它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
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"));
}