【问题标题】:Is there a way to remove leading whitespace of the first item in a CSV file?有没有办法删除 CSV 文件中第一项的前导空格?
【发布时间】:2019-04-28 06:22:19
【问题描述】:

我尝试了多种方法来查看它们是否会删除我的 CSV 文件中第一个条目的前导空格,但它们似乎都不起作用,我还确认我没有不小心在我的文件。

我使用了 String.replaceAll(" ", "")、String.trim()、String.strip(),但它们都不起作用。

for(int r = 0; r < 303; r++){
            String s = file.nextLine();
            s = s.replaceAll(" ", ""); //attempt to remove whitespace
            str_arr = s.split(",");

            for(int c = 0; c < 6; c++){
                str_arr[c] = str_arr[c].strip(); //2nd attempt
                System.out.println(str_arr[c]); //here it just prints the 
                                                  number 64 with a space in 
                                                  front of it
                data_set[r][c] = Integer.parseInt(str_arr[c]); 
            }
        }

确实删除了所有字符串的空格,它只是第一个条目号仍然具有前导空格,这导致行 Integer.parseInt(str_arr[c]) 返回 NumberFormatException (我知道这会返回,因为有前导空格)。

【问题讨论】:

  • “我知道这会返回,因为有一个前导空格” - 您是否进行了十六进制转储并验证“前导空格”是 0x20?它很可能不是空格,而是像 Unicode BOM 或不间断空格 (U+00A0) 之类的东西。 "我使用了 String.replaceAll(" ", "")、String.trim()、String.strip(),但它们都不起作用。"
  • @JimGarrison 我不确定你的意思是什么,因为我只是一个业余程序员,所有这些复杂的事情对我来说都没有意义。那我该如何做一个十六进制转储呢?
  • 可以分享一份csv吗?
  • @Jaja 我该怎么做,我似乎无法附加文件。
  • @Phillip,例如:放到云端分享链接

标签: java string csv


【解决方案1】:

您的文件是 BOM,因此我们需要其他方式来处理它,请参阅 here 了解更多信息。

public static void readCSV(){
    String p1 = "file ...\\heart.csv";

    List<String> linesInFile1 = new ArrayList<>();
    try {
        linesInFile1 = Files.readAllLines(new File(p1).toPath(), Charset.defaultCharset() );
    } catch (IOException ex) {
        Logger.getLogger(StackOverflows.class.getName()).log(Level.SEVERE, null, ex);
    }

    //69,1,145,233,150,1
    for(String ss:linesInFile1){
        for(String s: ss.split(",")){
            System.out.print(Integer.valueOf(removeUTF8BOM(s))+"   ");
        }   
        System.out.println();
    }
}

private static String removeUTF8BOM(String s) {
    final String UTF8_BOM = "\uFEFF";
    if (s.startsWith(UTF8_BOM)) {
        s = s.substring(1);
    }
    return s;
}

【讨论】:

  • 为什么要降级这个答案?请发表评论
【解决方案2】:

您可以使用 trim() 方法删除空格。

String removeWhiteSpace = " Hello";
System.out.println(removeWhiteSpace.trim());

【讨论】:

  • 已经确定 trim 看起来看起来像空格的字符起作用。
  • 然后尝试在下面提到的行中添加 trim() 或 strip(): data_set[r][c] = Integer.parseInt(str_arr[c].strip());
  • 这种特殊情况中,该行会产生异常。请阅读帖子及其下方的cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多