方法计数文件中的单词

时间:2018-07-26 18:33:52

标签: java nio stringtokenizer

大家好,我正在写一种计算文件中单词数量的方法,但是显然代码中的某个地方有错误,该方法不起作用。这是我的代码:

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方法后,它什么也不显示。错误在哪里?

3 个答案:

答案 0 :(得分:1)

您的代码将在文件中记录……如果您遵循该思想,那么会很好。

现在您的代码就是简单地读取行,将它们放入一个大字符串中,然后对该操作的结果不执行。您只有一个int计数器...的init's设置为0,然后不使用或增加就返回!并且除非我弄错了,否则<html> <body> <h3>Hello world</h3> <script type="text/javascript"> var h3 = document.querySelector('h3'); var r = document.createRange(); r.selectNode(h3); window.getSelection().addRange(r); document.execCommand("copy"); </script> </body> </html> 会自动最后删除换行符,因此,总的来说,您的代码不过是没用的。

要计算个单词,您必须占用每一行,并(例如)分割该单行字符串作为空格。这会给您一个数字。然后将这些数字加起来。

长话短说:真正的答案是您应该退后一步。假设这将神奇地解决问题,请不要仅仅编写代码。取而代之的是:首先想想一个可以解决问题的策略(算法)。用纸和笔写下算法思想。然后“手动”对一些样本数据运行算法。然后,最后将算法转换为代码。

答案 1 :(得分:1)

此外,除了您什么都不输出之外,逻辑背后还有一些小错误。我在这里和那里做了一些更改,以使您的代码正常工作。

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

答案 2 :(得分:0)

这是使用Java 8中的函数式编程的代码。这也是使用Stream的{​​{1}}的常见示例-可用于计数或打印文件中的单词。< / p>

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