Java 方法对文件中的字进行计数

Java 方法对文件中的字进行计数,java,nio,stringtokenizer,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 =

嗨,伙计们,我正在写一个计算文件中单词的方法,但显然代码中有一个错误,这个方法不起作用。这是我的密码:

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中的方法后,它将不显示任何内容。错误在哪里?

您的代码将计算文件中的行数。。。好吧,如果你继续这个想法

现在,您的代码只是读取行,将它们放入一个大字符串中,然后对该操作的结果执行任何操作。你有一个整型计数器。。。谁被初始化为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;
}
static int count(字符串文件名)引发IOException{
Path Path=Path.get(文件名);
整数计数=0;
列表行=文件。readAllLines(路径);
用于(字符串s:行){
字符串修剪=s.trim();
count+=trimmed.isEmpty()?0:trimmed.split(\\s+)。长度;
}
返回计数;
}

以下是在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);

注意
文件。行(路径)
返回一个
,其中包含来自输入文件的行。此方法类似于
readAllLines
,但返回的是流而不是
列表

您没有向控制台打印任何内容,那么您为什么希望有任何输出?您的代码的哪一部分应该输出某些内容?噢,对不起,伙计们
ilosc
从未分配结果值。另外,你好像什么都没用你的柜台。因此,这里有几个问题:-)。