【问题标题】:How to Convert List<String[]> to Comma Separated String without " " in Java如何在 Java 中将 List<String[]> 转换为没有“”的逗号分隔字符串
【发布时间】:2019-08-08 19:22:20
【问题描述】:

我正在尝试在读取 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>

【问题讨论】:

  • 请添加csv writer的库名。
  • 添加到问题中
  • 如果您的要求真的只是:从文件中删除第一行,那么我不会在这里使用 csv 读取器/写入器。只需使用普通缓冲读取器逐行读取文件,并省略写入第一行。
  • @GhostCat 有什么例子吗?
  • 请后退。我真的不明白你到底打算达到什么目的。我的意思是:您的代码的实际目的是什么?究竟发生了什么,预计会发生什么?哪些数据需要在文件中,以及在方法运行后“在内存中”?

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


【解决方案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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这部分怎么样 (item -> new String[] {String.valueOf(item.getPatientId()), item.getPatName(), item.getPatLastName()}) ?
    • @SanjX 查看我更新的答案。如果您有List&lt;String[]&gt;,那么它会转换为不带“”的字符串逗号分隔。对你的 newList 执行上述操作。
    • 它不会那样工作。因为我正在使用 write.writeAll(); CSVWriter 中的 writeAll (java.util.List) 无法应用于 (java.lang.String)
    • @SanjX 你的头衔是什么。再读一遍。我按照你的标题回答了。
    • 那么这个人是如何正确理解的 :) stackoverflow.com/a/55222066/7758011 没关系,谢谢!
    【解决方案3】:

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

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

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

    但我的意见是将字符串保留在引号中以避免读取期间的数据描述。

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多