如何在Java中将List <string []>转换为不带“”的逗号分隔字符串

时间:2019-03-18 12:13:30

标签: java unit-testing filereader filewriter csv-write-stream

我试图在读取后从CSV文件中删除第一行。代码运行正常,但是在重写时在数据中添加了“”。 例如:

  • 在写入csv文件之前:100,COMRADE,CAMPBELL
  • 写入csv文件后:“ 100”,“ COMRADE”,“ CAMPBELL”

    这是代码。

================================================ =======================

public void deleteLineFromCsv() throws IOException {
        List<PatientsTabData> list = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new FileReader(new File("src/main/resources/patients.csv")));
        String line = reader.readLine();
        while(line != null) {
            String[] split = line.split(",");
            list.add(new PatientsTabData().patientId(Integer.parseInt(split[0])).patName(split[1]).patLastName(split[2]));
            line = reader.readLine();
        }
        list.remove(0);
        CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")));
        List<String[]> newlist = list.stream().map(item -> new String[]
                {String.valueOf(item.getPatientId()), item.getPatName(), item.getPatLastName()})
                .collect(Collectors.toList());
        writer.writeAll(newlist);
        writer.close();
    }
  

图书馆:

        <dependency>
            <groupId>net.sf.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>2.3</version>
        </dependency>

3 个答案:

答案 0 :(得分:1)

创建作家时,可以使用其他构造函数。更改

CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")));

CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")),',',CSVWriter.NO_QUOTE_CHARACTER);

答案 1 :(得分:0)

这是将列表转换为逗号分隔的单个字符串的方法。

List<String[]> oldList= . . . ;
String requiredString = oldList
.stream()
    .map(Arrays::asList)
    .flatMap(Collection::stream)
    .collect(Collectors.joining(","));

答案 2 :(得分:0)

您的CSV编写器正在将每个元素作为字符串写入csv文件中。这可以通过库中的设计来完成,因为它将在字符串中的数据中保留任何逗号,如果您的数据中也包含逗号,以后将不会添加额外的列。

"name","class","house, street, city","value"

请参阅您的库的文档,并检查它是否提供了不将每个元素都视为字符串的选项。

但是我的意见是将字符串保留在引号中,以避免在读取过程中出现数据描述问题。