CSV文件中的值包含不带引号的逗号字符

时间:2018-03-10 16:21:10

标签: java csv

我从客户端获得了一个CSV文件,其中一些单元格包含多个逗号(,)。因此,在用逗号分割后,为某些单元格获取错误的值。

实施例: 对于细胞值187,859,049我得到187.但我需要187,859,049。

我的分割逗号_

的代码
        String line = "";

        //Create the file reader
        fileReader = new BufferedReader(new FileReader(readfileName));

        //Read the CSV file header to skip it
        fileReader.readLine();

        //Read the file line by line starting from the second line
        while ((line = fileReader.readLine()) != null) {
            //Get all tokens available in line
            String[] tokens = line.split(Constant.COMMA_DELIMITER);   
            if (tokens.length > 0) {
                //Create a new student object and fill his  data
                ShareNumber shareNumber = new ShareNumber(tokens[Constant.Cell_0],tokens[Constant.Cell_1],tokens[Constant.Cell_2]);
                shareNumberList.add(shareNumber);
            }

我该如何解决这个问题? 提前致谢。

3 个答案:

答案 0 :(得分:3)

首先 - 让您的客户不要在他们写入CSV文件的数字中加入逗号。

假设你做不到......

您需要能够使用“假”逗号区分“真实” - 使用有关实际数据的信息。具体来说,您可以使用以下信息:

  • 已知哪些字段包含数字
  • 值范围是多少(例如,它总是超过999?那么只有3位数字的“字段”实际上可能是比逗号更大的字段的一部分)
  • 该行上的逗号总数; “假”逗号的数量是逗号数 - (字段数 - 1)。如果只有一个数字字段,那么这已经准确地告诉你哪些逗号是“假的”。

此外,这意味着您不是通过逗号分解来开始处理行,而是通过确定如何分解它(例如通过匹配它上面的正则表达式)。或者,你可以先打破它,但后来需要统一一些破碎的数字部分。

答案 1 :(得分:0)

按照我修复问题的方式格式化数字单元格。

Formatting number for removing unquoted comma characters.

答案 2 :(得分:0)

我读了上面的所有答案。我认为,这种奇怪的问题一般是由于客户端的文件问题而发生的。它浪费了很多开发人员的时间。因此,开发人员应始终尽量严格要求客户解决此类问题。