[英]Method count words in a file
嗨,大家好,我正在写一种计算文件中单词数量的方法,但是显然代码中的某个地方有一个错误,该方法不起作用。 这是我的代码:
public class Main2 {
public static void main(String[] args) {
count("/home/bruno/Desktop/WAR_JEE_S_09_Podstawy/MojPlik");
}
static int count(String fileName){
Path path = Paths.get(fileName);
int ilosc = 0;
String wyjscie = "";
try {
for (String charakter : Files.readAllLines(path)){
wyjscie += charakter;
}
StringTokenizer token = new StringTokenizer(wyjscie," \n");
} catch (IOException e) {
e.printStackTrace();
}
return ilosc;
}
}
文件路径正确,这里是文件内容
test test
test
test
在我调用main中的方法后,它什么也不显示。 错误在哪里?
您的代码将对文件中的行计数...好吧,如果您遵循该思想的话。
现在,您的代码只是读取行,将它们放入一个大字符串中,然后对该操作的结果不执行任何操作。 您只有一个int计数器...的init's设置为0,然后不使用或增加就返回! 除非我弄错了,否则readAllLines()
会自动最后删除换行符,因此,总的来说,您的代码不过是没用的。
要计算单词数,您必须占据每一行,并(例如)将该行字符串拆分为空格。 那给你一个数字 。 然后将这些数字加起来。
长话短说:真正的答案是您应该退后一步。 假设这将神奇地解决问题,请不要仅仅编写代码。 取而代之的是:首先考虑 解决问题的策略(算法)。 用纸和笔写下算法思想。 然后“手动”对一些样本数据运行算法。 然后,最后将算法转换为代码。
此外,除了不输出任何内容外,逻辑后面还会有轻微的错误。 我在这里和那里做了一些更改,以使您的代码正常工作。
s.trim()
删除所有前导和训练空格,而trimmed.split("\\\\s+")
则将字符串分割为任何空格字符,包括空格。
static int count(String fileName) throws IOException {
Path path = Paths.get(fileName);
int count = 0;
List<String> lines = Files.readAllLines(path);
for (String s : lines) {
String trimmed = s.trim();
count += trimmed.isEmpty() ? 0 : trimmed.split("\\s+").length;
}
return count;
}
这是使用Java 8中的函数式编程的代码。这也是使用Stream
的flatMap
的常见示例-可用于计数或打印文件中的单词。
long n = Files.lines(Paths.get("test.txt"))
.flatMap(s -> Stream.of(s.split("\\s+")))
.count();
System.out.println("No. of words: " + n);
注意Files.lines(Path)
返回一个Stream<String>
,其中包含来自输入文件的行。 此方法类似于readAllLines
,但是返回流而不是List
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.