【发布时间】:2014-02-18 22:24:29
【问题描述】:
在 Java 编程中我应该使用什么函数来获取 CSV 文件中的冒号总数?
PS:不是 Java 开发人员。
【问题讨论】:
-
你关心逗号吗?
-
这是一个荒谬的关闭原因。 OP 还能提供哪些更多信息?
在 Java 编程中我应该使用什么函数来获取 CSV 文件中的冒号总数?
PS:不是 Java 开发人员。
【问题讨论】:
逐字符读取文件(使用 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。
【讨论】:
逐行读取文件。对于每一行,使用replaceAll 去掉每个不是冒号的字符。然后得到结果String的长度。保留此结果的累积总数。
【讨论】:
org.apache.commons.io.FileUtils 将整个文件逐行读取为字符串? :-)
如果你不想重新发明轮子:
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
int count = StringUtils.countMatches(FileUtils.readFileToString(new File("file.csv")), ":");
【讨论】:
我不久前发现的一个计算出现次数的很酷的技巧是获取string 的长度,并从中取出所有不是您想要的值的值。
示例
// Assume fileStr contains everything in the file
int numberOfColons = fileStr.length() - fileStr.replaceAll(":", "").length();
这将为您提供文件中的冒号数。
编辑
刚从那里得到它时才想起。来自this question。
我喜欢这种方法的原因
显然,它非常短,总是很好。它确实给处理器带来了一些影响,但它避免了所有循环(至少在您的代码中),而且它似乎是解决问题的一个非常优雅的解决方案。
【讨论】: