用逗号分隔 HashMap 输出到 .csv

Posted

技术标签:

【中文标题】用逗号分隔 HashMap 输出到 .csv【英文标题】:Separating HashMap Output to .csv with Comma 【发布时间】:2017-04-27 19:39:15 【问题描述】:

在这个程序中,我将数据从 HashMap 数据库导出到 .csv。写入文件的数据是key和studentInformation,由Name、Major、GPA组成。代码将其输出到 .csv 中,但是我希望每个值都用逗号分隔,因此每个值都位于电子表格的不同列中。我将如何在数据库的每个输出上实现逗号????提前致谢。

      //Output the database to the file
      Map.Entry<Integer, Student> studentInformation = iterator.next();
      int key = studentInformation.getKey();
      bW.write("Student ID: " + key + (",") + studentInformation.getValue() + ("\n\n");

如果我在 studentInformation.getValue() 之后添加 + (","),它不会分隔 studentInformation 的每个值...有什么想法吗?

【问题讨论】:

您需要重写 Student 的 toString() 方法以输出所需的 CSV 格式,或者创建一个具有 Student 输入和 String 输出的函数,以正确格式化学生信息。 我不知道我完全理解你在这里推荐的内容。我正在拼凑它,但仍然没有任何运气。今天该挂了! @Daniel Bickler 不建议使用toString()toString() 用于调试目的,而不是将特定格式的字符串表示为 CSV。如果学生在 CSV 中写入的字段与调试所需的字段不同,我们就会卡住。 【参考方案1】:

您需要在 CSV 列中的每个字段都必须从 Student 类中单独检索。 例如:

  public static final String CSV_SEPARATOR  = ",";
  ...
  Map.Entry<Integer, Student> studentEntry = iterator.next();
  int key = studentEntry.getKey();
  Student student = studentEntry.getValue();
  String line = "Student ID: " + key + CSV_SEPARATOR + student.getName() 
  +  CSV_SEPARATOR  + student.getMajor() + System.lineSeparator();
  bW.write(line);

使用自定义常量CSV_SEPARATOR 不重复“,”并且更喜欢 System.lineSeparator()\n\n 取决于操作系统。

最后你为什么要重新发明***? SuperCSV 和 OpenCSV 等库做得很好。 您应该尝试其中一种。

【讨论】:

谢谢! - 无论如何,我最终对格式采取了不同的方法,但如果我坚持我的初衷,你的建议肯定就足够了。再次感谢!【参考方案2】:

创建一个格式化函数,它接受Student 并返回一个字符串。然后为地图中的每个值调用它。

public static String formatCsv(Student s) 
  return s.getName() + ", " + s.getGrade() + ", " + s.getHeight();

或者你可以使用 Guava Joiner 类

public static String formatCsv(Student s) 
  return Joiner.on(',').join(s.getName(), s.getGrade(), s.getHeight());

【讨论】:

以上是关于用逗号分隔 HashMap 输出到 .csv的主要内容,如果未能解决你的问题,请参考以下文章

在雪花结果集中用逗号分隔输出数字

php 如何从mysql输出数组用逗号分隔?

在文本文件中使用逗号分隔值打印输出

用pyton回答请输入3个小数,用print()函输出3个数,数之间用逗号分隔?

按组的 DB2 逗号分隔输出

在Python中输出逗号分隔的方法有哪些