为什么CSV阅读器(Java)在读取行时用逗号添加空格?

时间:2017-04-18 07:34:44

标签: java file csv parsing

我有一个csv文件,其中每行中的逗号用逗号分隔,例如:

WORD1,word2和WORD3,word4

word5,word6,word7,word8 ......等等。

我能够解析它并读取行但是当我打印行时它会以逗号后面的空格返回:

word1,word2,word3 .....

BufferedReader r = new BufferedReader(new InputStreamReader(new BlobstoreInputStream(blobKey)));

            @SuppressWarnings("resource")
            /*readinf from blob file*/
            CSVReader reader = new CSVReader(r,','); 
            String[] nextLine; 
            List<String> lines = new ArrayList<>();
            while ((nextLine = reader.readNext()) != null)
            {
                System.out.print(Arrays.toString(nextLine)+"\n");
            }

如何删除空格并获取&#34; word1,word2,word3 ....&#34;?

更新:我只需要在逗号后删除空格,而不是逗号中的单词之间的空格。 (&#34; word1另一个word2,word3,word4和word5&#34; ---&gt;&#34; word1另一个word2,word3,word4和word5&#34;

1 个答案:

答案 0 :(得分:1)

使用Arrays.toString输出数组时,正在添加空格。这不是CSV阅读器。

如果要在逗号后面没有空格格式化数组,可以使用StringJoiner。例如,在Java 8中,您可以编写:

 List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
 String commaSeparatedNumbers = numbers.stream()
     .map(i -> i.toString())
     .collect(Collectors.joining(","));

如果您需要使用Java 7或更早版本:

  • 向您的经理指出Java 7在很久以前就已经过期了,并且继续使用它是一种安全风险,并且对于未来的代码质量也不利。
  • 您可以在大约5行代码中实现StringJoiner使用循环和StringBuilder ...的功能。

    StringBuilder sb = new StringBuilder();
    for (String s: array) {
        if (sb.length() > 0) sb.append(",");
        sb.append(s);
    }
    System.out.println(sb);