Java 8 Streams |文本文件中行的平均字数

Java 8 Streams |文本文件中行的平均字数,java,java-8,java-stream,Java,Java 8,Java Stream,我试图在Streams上做一些练习,遇到了以下问题: 我有一个文本文件,我想计算每行的平均字数。有人能告诉我我的思维方式是否正确吗?下面是一些伪代码,我认为一旦实现,就应该实现这个技巧: double wordCount(String filepath){ return Files.lines(Paths.get(filepath)) // make a wordarray of the line //

我试图在Streams上做一些练习,遇到了以下问题:

我有一个文本文件,我想计算每行的平均字数。有人能告诉我我的思维方式是否正确吗?下面是一些伪代码,我认为一旦实现,就应该实现这个技巧:

double wordCount(String filepath){
  return Files.lines(Paths.get(filepath))
                      // make a wordarray of the line
                      // average the size of every wordarray with something like that
                          (collect(Collectors.averagingDouble())
有人能帮我吗

如何将一行转换为字串阵列


如何获得该阵列的大小?

缺少的两个步骤是:

如何将一行转换为字串数组:围绕空格拆分>>s.split

如何获取该数组的大小:获取其长度>>arr.length

在IntStream上使用专门的操作

不太具体的收集器操作


缺少的两个步骤是:

如何将一行转换为字串数组:围绕空格拆分>>s.split

如何获取该数组的大小:获取其长度>>arr.length

在IntStream上使用专门的操作

不太具体的收集器操作


通过将一个字符串拆分为一组字符串(每个单词对应一个字符串),并用它们填充数组,只是为了在以后询问数组的大小,这样做是不必要的

如果你想得到单词的数量,考虑一个直截了当的方法,只计算单词

private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
    int count = 0;
    for(Matcher m = WORD.matcher(s); m.find(); ) count++;
    return count;
}
然后,您可以在流操作中使用此方法,以获得平均字数:

Files.lines(Paths.get(filePath)).mapToInt(YourClass::wordCount).average().orElse(0)
使用Java9,您可以重写wordCount方法以使用类似

private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
    return (int)WORD.matcher(s).results().count();
}

但是循环可能更有效,因为它省略了MatchResult实例的构造。

将一个字符串拆分为一组字符串,每个单词一个字符串,用它们填充数组,只是为了在以后询问数组的大小,这是在做不必要的工作

如果你想得到单词的数量,考虑一个直截了当的方法,只计算单词

private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
    int count = 0;
    for(Matcher m = WORD.matcher(s); m.find(); ) count++;
    return count;
}
然后,您可以在流操作中使用此方法,以获得平均字数:

Files.lines(Paths.get(filePath)).mapToInt(YourClass::wordCount).average().orElse(0)
使用Java9,您可以重写wordCount方法以使用类似

private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
    return (int)WORD.matcher(s).results().count();
}

但是循环可能更有效,因为它省略了MatchResult实例的构造。

实际上您提到了几个任务。如何将一行转换为字符串数组。如何获取此数组的大小。解决这些子任务,并将您的工作带到这个问题。如何获得该阵列的大小?真正地arr.length@安德烈亚斯:是的,我知道那是arr.length。。。不知怎的,我觉得这很复杂,而且觉得流没有那么容易…实际上你提到了几个任务。如何将一行转换为字符串数组。如何获取此数组的大小。解决这些子任务,并将您的工作带到这个问题。如何获得该阵列的大小?真正地arr.length@安德烈亚斯:是的,我知道那是arr.length。。。不知怎的,我觉得这很复杂,但觉得流没有那么容易…很好,尽管我会避免在这个特定任务中使用第二种方法。见@azro非常感谢@Aominè我根本不想使用String.split,因为我只想知道单词/匹配的数量……很好,尽管我不想在这个特定任务中使用第二种方法。见@azro非常感谢@Aominè我根本不想使用String.split,因为我只想知道单词/匹配数…很好,看起来小巧优雅。@Aominè特别是java-9,一个真正适合扫描人员的工作,看起来紧凑而优雅。@Aominè特别是java-9,一个真正的扫描仪工作