Java:克隆stringbuilder的内容并将项附加到每一行

Java:克隆stringbuilder的内容并将项附加到每一行,java,csv,Java,Csv,如何根据记录数克隆Stringbuilder的内容,并将记录附加到克隆内容的每一行。我试图将数据写入CSV,每行都有重复的列值,重复的列值是记录大小的倍 示例输出CSV应该如下所示 CN1| CN2| CN3 1 b c 1 d f 2 g h 下面是我正在使用的示例Java代码 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import jav

如何根据记录数克隆Stringbuilder的内容,并将记录附加到克隆内容的每一行。我试图将数据写入CSV,每行都有重复的列值,重复的列值是记录大小的倍

示例输出CSV应该如下所示

CN1| CN2| CN3
 1    b    c
 1    d    f
 2    g    h
下面是我正在使用的示例Java代码

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CSVWrite {
public static Map<String, List<Records>> getData() {

    Map<String, List<Records>> fields = new HashMap<>();

    List<Records> records_1 = new ArrayList<>();

    Records sample_1 = new Records();
    sample_1.setName("b");
    sample_1.setId("c");

    Records sample_2 = new Records();
    sample_2.setName("d");
    sample_2.setId("f");

    records_1.add(sample_1);
    records_1.add(sample_2);

    List<Records> records_2 = new ArrayList<>();

    Records sample_3 = new Records();
    sample_1.setName("g");
    sample_1.setId("h");

    records_2.add(sample_3);

    fields.put("1", records_1);
    fields.put("2", records_2);

    return fields;
}

public static void main(String args[]) {
    CSVWrite write = new CSVWrite();
    String csvString = write.getCsvString();
    String expectedString = "1,b,c\n" + "1,d,f\n" + "2,g,h";
    System.out.println(csvString.equals(expectedString));
}

public String getCsvString() {
    Map<String, List<Records>> fields = CSVWrite.getData();
    StringBuilder sb = new StringBuilder();

    for (Map.Entry<String, List<Records>> entry : fields.entrySet()) {
        sb.append(entry.getKey());
        List<Records> records = entry.getValue();

        for (int i = 0; i < records.size(); i++) {
            // how to clone contents of sb repeated times based on records size and append
            // record items to all.
        }
    }
    return sb.toString();
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公共类CSVWrite{
公共静态映射getData(){
映射字段=新的HashMap();
列表记录_1=新的ArrayList();
记录样本_1=新记录();
样本_1.集合名(“b”);
样本1.setId(“c”);
记录样本_2=新记录();
样本2.集合名(“d”);
样本2.setId(“f”);
记录1.添加(样本1);
记录1.添加(样本2);
列表记录_2=新的ArrayList();
记录样本_3=新记录();
样本_1.集合名称(“g”);
样本1.setId(“h”);
记录2.添加(样本3);
字段。放置(“1”,记录_1);
字段。放置(“2”,记录2);
返回字段;
}
公共静态void main(字符串参数[]){
CSVWrite write=新的CSVWrite();
字符串csvString=write.getCsvString();
字符串expectedString=“1,b,c\n”+“1,d,f\n”+“2,g,h”;
System.out.println(csvString.equals(expectedString));
}
公共字符串getCsvString(){
Map fields=CSVWrite.getData();
StringBuilder sb=新的StringBuilder();
for(Map.Entry:fields.entrySet()){
sb.append(entry.getKey());
列表记录=entry.getValue();
对于(int i=0;i
首先,我认为有一个错误,这个代码看起来很奇怪。var样本_3已生成,但未正确填充:

Records sample_3 = new Records();
sample_1.setName("g");
sample_1.setId("h");
应该是:

Records sample_3 = new Records();
sample_3.setName("g");
sample_3.setId("h");
最后,不需要克隆任何东西来获得所需的结果,只需像这样重写
getCsvString()

public String getCsvString() {
    Map<String, List<Records>> fields = CSVWrite.getData();
    StringBuilder sb = new StringBuilder();

    for (Map.Entry<String, List<Records>> entry : fields.entrySet()) {
        List<Records> records = entry.getValue();

        for (Records record : records) {
            sb.append(entry.getKey());
            sb.append(",").append(record.getName());
            sb.append(",").append(record.getId());
            sb.append("\n");
        }
    }
    return sb.toString();
}
公共字符串getCsvString(){
Map fields=CSVWrite.getData();
StringBuilder sb=新的StringBuilder();
for(Map.Entry:fields.entrySet()){
列表记录=entry.getValue();
用于(记录:记录){
sb.append(entry.getKey());
sb.append(“,”).append(record.getName());
sb.append(“,”).append(record.getId());
某人附加(“\n”);
}
}
使某人返回字符串();
}
这两项修正将产生输出:

1,b,c

1,d,f

2,g,h


我不清楚你想克隆什么。这三个预期的输出行彼此不同。无关:阅读java命名约定。你只在某个常数中使用u。这里的问题到底是什么,完全不清楚。你想克隆什么?你想什么时候克隆它?在您的示例中,只有值
1
出现了两次,我不知道为什么。我认为您应该向我们解释您的问题,而不是您认为实现应该是什么,因为现在是这样。相反,请解释输入是什么,以及输出与该输入的关系。注意:在CSV中,逗号后没有空格。@realpoint OK,修复。除了那个小细节,它回答了你们的问题吗?@Benoit这部分回答了,让我清楚地更新一下问题