JAVAutil。Java扫描程序从文件中计算字、行和字符
我正试着从文件中读入单词。我需要计算文本文件中的单词、行和字符。字数应仅包括单词(仅包含字母、标点、空格或非字母字符)。字符计数应仅包括这些单词中的字符
这就是我目前所拥有的。我不知道怎么数这些字符。每次我运行程序时,只要我输入文件名,它就会跳转到catch机制(而且它应该与文件路径没有问题,因为我以前尝试过使用它)。我试图在没有try/catch的情况下创建程序,以查看错误是什么,但是没有try/catch就无法工作
为什么输入文件名时会跳转到catch函数?如何修复此程序以正确计算文本文件中的字、行和字符
# 1 楼答案
我尝试了你的代码,但没有收到任何异常。然而,我怀疑当你输入文件名时,你可能忘记了文件的扩展名
# 2 楼答案
如果我给出正确的文件名,你的代码不会有任何异常。至于读取字符数,你应该稍微修改一下逻辑。与其直接连接字数计数,不如创建一个
StringTokenizer st = new StringTokenizer(tempo, "[ .,:;()?!]+");
的新实例,遍历所有标记,并对每个标记的长度求和。这应该会给出字符数。比如下面注意:用
StringTokenizer
转义字符将不起作用。i、 e.您可能希望\\s
应该使用任何空格字符进行分隔,但它将基于文字字符s
进行分隔。如果你想转义一个字符,我建议你使用java.util.Pattern
和java.util.Matcher
并使用它matcher.find()
来识别单词和字符# 3 楼答案
您可能在输入时忘记了文件扩展名,但有一种更简单的方法。你还提到你不知道如何计算角色。你可以试试这样:
检查代码
注意:我们使用streams包,在查找单词时过滤掉空字符串。现在让我们向前跳一点
上面的部分获取文件中的所有文本,并将其存储为字符串
好的,这是一条长长的队伍。让我们把它分解一下
"Lines: %d\nWords: %d\nCharacters: %d"
是一个格式字符串,其中每个%d
都被printf
函数中相应的参数替换。第一个%d
将被content.split("\n").length
替换,这是行数。我们通过拆分字符串得到行数第二个
%d
被Stream.of(content.split("[^A-Za-z]")).filter(x -> !x.isEmpty()).count()
替换Stream.of
从一个数组中创建一个流,在拆分任何非字母的内容(你说的单词是任何非字母的内容)之后,该数组就是一个字符串数组。接下来,我们过滤掉所有空值,因为String.split
保留空值。.count()
是不言自明的,取过滤后剩余的单词量第三个也是最后一个
%d
是最简单的。它被字符串的长度所取代content.length()
应该是不言自明的我保留了你的
catch
块,但我觉得System.exit(0)
有点多余