方法计算文件中的单词数

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 计数器......谁被初始化为 0,然后就返回了,而不是 used/increased!除非我弄错了,否则 readAllLines() 最后会自动删除换行符,所以总的来说,你的代码没什么用。

要计算字数,您必须取每一行并且(例如)split 该单行字符串用于空格。这给你一个数字。然后将这些数字相加。

长话短说:真正的答案是你应该退后一步。不要只是编写代码,假设这会神奇地解决问题。相反:首先想出一个解决问题的策略(算法)。用纸笔写下算法思路。然后 "manually" 运行 一些样本数据上的算法。然后,最后,把算法变成代码。

另外,除了你没有输出任何东西,你的逻辑背后有一个小错误。我在这里和那里做了一些更改以使您的代码正常工作。

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;
}

这里是Java8中使用函数式编程的代码。这也是使用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) returns a Stream<String> 其中包含来自输​​入文件的行。此方法类似于 readAllLines,但 returns 流而不是 List