在Java中确定文件总字数的最佳方法是什么?

在Java中查找文本文件中单词总数的最佳方法是什么? 我认为Perl是最好的找到这样的东西。 如果这是真的那么从Java中调用Perl函数将是最好的? 在这样的条件下你会做什么? 还有更好的想法?

恭喜你偶然发现了一个最大的语言问题! 什么是单词? 据说一个词是唯一实际意味着它是什么的词。 整个语言学领域致力于意义的单词/单位 – 形态学。

我假设您对用英语计算单词有疑问。 但是,由于语言差异,创建一个与语言无关的单词计数器/解析器几乎是不可能的。 例如,人们可能会认为只处理由空格分隔的字符组就足够了。 但是,如果您在日语中查看以下示例,您将看到该方法不起作用:

これは日本语の例文です。

此示例包含3个不同的单词,并且它们都不以空格分隔。 通常,使用基于字典的方法解析日语单词边界,并且有许多商业库可用于此。 我们很幸运有英文空间! 我相信印度语,中文和韩文也有类似的问题。

如果要以任何可能的多语言输入方式实际部署此解决方案,则能够根据所解析的语言插入不同的字数统计方法非常重要。

我认为第一个答案是一个很好的答案,因为它使用Java的Unicode空白值知识作为分隔符。 它通过使用以下正则表达式进行匹配来标记: \p{javaWhitespace}+

 int count = 0; Scanner sc = new Scanner(new File("my-text-file.txt")); while (sc.hasNext()) { ++count; sc.next(); } 

虽然Perl可以做到这一点,但我认为将它链接到/调用它来完成这种任务是非常难的(除非你已经测试过了)。

  • 我的建议是寻找和学习在网络上做你需要的代码,例如: http ://schmidt.devlib.org/java/word-count.html

如果你在unix上, wc -w filename就可以了。

对定义“单词”的内容做出一些假设,一种解决方案是使用文本流阅读器打开文件并扫描它,计算非连续空白字符的数量,加上一个用于结束,例如

  this is some sample text this is some more sample text 

上面的文字中有11个单词,计为9个空格,1个换行符和1个文件结尾

我将word_count int初始化为1,然后循环遍历文件中的每个字符,并为每个空白字符增加word_count除非前一个字符是空白字符。 (空格,制表符或换行符。)