5

我正在使用 Super CSV,它看起来像一个很棒的包。

我唯一担心的是如何处理名称中带有空格的列。不,我不能自己回去删除空格。这些文件将由数百个提供给我,我没有时间回去修复每个文件的所有 60 列,我不能相信其他人都能正确完成。

如何处理标题中有空格的列(即“名字”而不是“名字”或“名字”)?

谢谢!

对于编码示例,请看这里:http ://supercsv.sourceforge.net/codeExamples_general.html

4

4 回答 4

5

您在链接到的示例中注意到这一行:

final String[] header = inFile.getCSVHeader(true);

这应该给你你的列名,不是吗?

http://supercsv.sourceforge.net/javadoc/index.html

我想我现在明白你的问题了。传递给read函数的 String[] 参数采用您要读入的类的属性名称。它是定位的,因此不必像标题那样命名。因此,例如,您可以拥有String[] header = inFile.getCSVHeader(),但随后拥有 的映射headerName->propertyName,因此,如果您的标头字段是:

First Name, Last Name, Age

但你的课是

getFirstName(), setFirstName(...);
getLastName(), setLastName(...);
getYears(), setYears();

传递给read方法不是(String[]) {"First Name", "Last Name", "Age"},因为你的标题是,而是传递给read一个(String[]) {"FirstName", "LastName", "Years"}数组。

于 2010-06-29T13:09:19.243 回答
3

要让带有空格的标头分隔 bean 映射和标头数组。

private final String[] header = new String[] { "First Name", "Last Name"}; private final String[] dataMapping = new String[] { "firstName", "lastName"}; beanWriter = new CsvBeanWriter(new FileWriter(path), CsvPreference.EXCEL_PREFERENCE); beanWriter.writeHeader(header); beanWriter.write(yourPojo, dataMapping, processors);

于 2015-09-04T04:18:28.953 回答
2

如果您想用不同的名称映射 CSV 标头,您可以创建一个哈希映射并将其用于您的内部实现,例如,您可以将“First Name”与“firstName”映射并根据您的内部名称填充您的 bean。

于 2010-06-29T13:19:17.787 回答
1

我意识到这是一个相当老的帖子,但其他人可能正在寻找一个替代的简单解决方案。这是我所做的,以确保我只有没有空格的字母数字标题名称:

  final String[] header = beanReader.getHeader(true);

  for(int i = 0; i <= header.length -1 ; i++ ) {
    header[i] = header[i].replaceAll("[^a-zA-Z0-9]+","");
  }
于 2013-03-01T01:52:13.903 回答