繁体   English   中英

方法计数文件中的单词

[英]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中的函数式编程的代码。这也是使用StreamflatMap的常见示例-可用于计数或打印文件中的单词。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM