【问题标题】:Java function for number of colons in a CSV file [closed]CSV文件中冒号数的Java函数[关闭]
【发布时间】:2014-02-18 22:24:29
【问题描述】:

在 Java 编程中我应该使用什么函数来获取 CSV 文件中的冒号总数?

PS:不是 Java 开发人员。

【问题讨论】:

  • 你关心逗号吗?
  • 这是一个荒谬的关闭原因。 OP 还能提供哪些更多信息?

标签: java csv


【解决方案1】:

逐字符读取文件(使用 BufferedReader 使其快速),并计算遇到的每个冒号:

int countColons() throws IOException {
    try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file.txt), "UTF-8"))) {
        int count = 0;
        int c;
        while ((c = in.read()) >= 0) {
            if (c == ':') {
                count++;
            }
        }
        return count;
    }
}

当然,您应该为您的文件使用适当的编码。不一定是 UTF-8。

【讨论】:

  • +1 表示不将整个文件加载到内存中。
【解决方案2】:

逐行读取文件。对于每一行,使用replaceAll 去掉每个不是冒号的字符。然后得到结果String的长度。保留此结果的累积总数。

【讨论】:

  • replaceAll 来计算字符数?为什么不逐字符读取文件并计算等于冒号的字符呢?对我来说听起来更合乎逻辑和更有效率。
  • @JBNizet 您可以将其发布为答案。如果你愿意,我会支持它。
  • @DavidWallace 为什么org.apache.commons.io.FileUtils 将整个文件逐行读取为字符串? :-)
  • @corsiKa 因为很多时候,必须处理非常大的文件。如果您只是按从头到尾的顺序处理文件,那么您真的不希望这样做会占用大量的堆空间。我有点沮丧,这里有多少答案是从将整个文件加载到内存中开始的——这真的不是一个好习惯。
  • @DavidWallace 我觉得这很难接受。我不记得上次我不得不处理这么大的事情是什么时候了。如果它真的那么大,它不应该在文件中,它应该在数据库中。
【解决方案3】:

如果你不想重新发明轮子:

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

int count = StringUtils.countMatches(FileUtils.readFileToString(new File("file.csv")), ":");

【讨论】:

  • 这太棒了 - 知道这些实用程序会让平凡的任务消失,这样我们就可以专注于更重要的开发工作。
【解决方案4】:

我不久前发现的一个计算出现次数的很酷的技巧是获取string 的长度,并从中取出所有不是您想要的值的值。

示例

// Assume fileStr contains everything in the file

int numberOfColons = fileStr.length() - fileStr.replaceAll(":", "").length();

这将为您提供文件中的冒号数。

编辑

刚从那里得到它时才想起。来自this question

我喜欢这种方法的原因

显然,它非常短,总是很好。它确实给处理器带来了一些影响,但它避免了所有循环(至少在您的代码中),而且它似乎是解决问题的一个非常优雅的解决方案。

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多