Scala 读取文件并统计单词出现次数 - 代码详解

以下代码展示了如何使用 Scala 读取一个文本文件,并统计每个单词出现的次数。

import scala.io.Source

object shiyan2_3 {
  def main(args: Array[String]): Unit = {
    // 定义一个名为main的方法,接收一个字符串数组类型的参数args,并返回一个Unit类型的值
    val filename = 'file.txt'
    val source = Source.fromFile('D:\test.txt') // 从文件中读取数据,返回一个Source类型的对象
    val list = source.getLines().toList // 获取source对象中的所有行,并将其转换为List类型
    source.close()
    var wordList: List[String] = list.flatMap(_.split(' ')) // 将list中的每一行按空格分割成单词,并将所有单词合并到一个List中
    var wordtuples: List[(String, Int)] = wordList.map((_, 1)) // 将wordList中的每个单词转换为一个元组,第一个元素为单词本身,第二个元素为1
    val wordgroup: Map[String, List[(String, Int)]] = wordtuples.groupBy(kv => kv._1) // 将wordtuples按照第一个元素(即单词本身)进行分组,返回一个Map类型的对象,其中键为单词本身,值为包含该单词所有元组的List
    var wordcount: Map[String, Int] = wordgroup.mapValues(list => list.size) // 将wordgroup中的每个键值对(即每个单词及其对应的元组List)转换为一个新的键值对,其中键为单词本身,值为该单词在元组List中出现的次数
    println(wordcount)
  }
}

代码解释

  1. def main(args: Array[String]): Unit = { ... }:

    • 定义一个名为 main 的方法,接收一个字符串数组类型的参数 args,并返回一个 Unit 类型的值。
    • 在 Scala 中,Unit 类型表示没有返回值的函数或方法。在这个例子中,main 方法不需要返回任何值,因此返回 Unit 类型。
    • main 方法是程序的入口点,当程序运行时,会首先执行 main 方法。
  2. val filename = 'file.txt':

    • 定义一个名为 filename 的变量,并将其赋值为 'file.txt',用于存储要读取的文件名。
  3. val source = Source.fromFile('D:\test.txt'):

    • 使用 Source.fromFile() 方法从指定路径的文件读取数据,返回一个 Source 类型的对象。
  4. val list = source.getLines().toList:

    • 使用 getLines() 方法获取 source 对象中的所有行,并使用 toList 方法将其转换为 List 类型。
  5. source.close():

    • 关闭 source 对象,释放资源。
  6. var wordList: List[String] = list.flatMap(_.split(' ')):

    • 使用 flatMap 方法将 list 中的每一行按空格分割成单词,并将所有单词合并到一个新的 List 中。
    • _.split(' ') 表示对 list 中的每个元素(即每行字符串)调用 split(' ') 方法,将其按空格分割成多个单词。
  7. var wordtuples: List[(String, Int)] = wordList.map((_, 1)):

    • 使用 map 方法将 wordList 中的每个单词转换为一个元组,第一个元素为单词本身,第二个元素为 1。
    • (_, 1) 表示创建一个包含两个元素的元组,第一个元素为当前单词,第二个元素为 1。
  8. val wordgroup: Map[String, List[(String, Int)]] = wordtuples.groupBy(kv => kv._1):

    • 使用 groupBy 方法将 wordtuples 按照第一个元素(即单词本身)进行分组,返回一个 Map 类型的对象。
    • kv => kv._1 表示将每个元组的第一个元素作为分组的键。
  9. var wordcount: Map[String, Int] = wordgroup.mapValues(list => list.size):

    • 使用 mapValues 方法将 wordgroup 中的每个键值对(即每个单词及其对应的元组 List)转换为一个新的键值对。
    • list => list.size 表示对每个键值对的 List 值调用 size 方法,获取该单词在 List 中出现的次数。
  10. println(wordcount):

  • 使用 println 方法输出 wordcount Map,其中包含每个单词及其出现的次数。

总结

这段代码展示了如何使用 Scala 的函数、集合操作和文件读取方法来读取文件并统计单词出现次数。通过学习这段代码,您可以了解 Scala 中的一些基本编程概念,例如函数、循环、集合操作等。

Scala 读取文件并统计单词出现次数 - 代码详解

原文地址: https://www.cveoy.top/t/topic/kx0g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录