我有两个String
数组:句子和分数。
我想创建一个.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
我确定某处的循环中存在问题。
如何解决?
答案 0 :(得分: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
}
}
所以使用这个
1。)使用索引
根据数组长度迭代数组 2。)使用索引访问数据并将其附加到StringBuilder
for(int i=0;i <score.length;i++) {
sb.append(sentence[i]);
sb.append(";");
sb.append(score[i]);
sb.append('\n');
//System.out.print(sb.toString()); to print values
//sb =new StringBuilder();
}
pw.write(sb.toString());
pw.close();
注意:用这个单循环替换两个循环
输出:
sentence 1;score 1
sentence 2;score
sentence 3;score 3
答案 1 :(得分:1)
@PavneetSingh的答案是解决您问题的短期解决方案,并且会有效。
但更好的方法是将您的设计从2个单独的数组更改为单个数组并与自定义类一起使用。 (这就是为什么我们称Java为面向对象的语言 btw ...)
此解决方案如下所示:
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"));
}