前置准备
- 在项目根目录下创建 “test.txt” 文件,写入内容:“I am studying scala. I like scala.”
- 确保 Scala 环境正常(可通过 "cala -version" 验证)
步骤 1:读取文件内容
val content = scala.io.Source.fromFile("成绩统计.txt").getLines()
步骤 2:拆分字符串为单词数组
scala
val list = content.split("\W+");
-
核心:split("\W+")按正则拆分字符串
- \W:匹配非单词字符(如 . 、空格)
- +:匹配 1 个或多个连续的非单词字符
-
结果:"list" 为数组 "Array(I, am, studying, scala, I, like, scala)"
步骤 3:统计单词出现次数
scala
val map1 = scala.collection.mutable.Map[String, Int]()
list.foreach(word => {
if (map1.contains(word)) {
map1(word) += 1
} else {
map1(word) = 1
}
})
-
核心:用可变'mutable.Map' 动态统计
- map1.contains(word):判断单词是否已在 Map 中
- 存在则次数 + 1,不存在则初始化为 1
-
结果:"map1" 存储 "Map(I -> 2, am -> 1, studying -> 1, scala -> 2, like -> 1)"
步骤 4:对统计结果排序
scala
val wordList = map1.toList.sortBy(_._2).reverse
-
核心:Map 本身无序,需转为 List 后排序
- map1.toList:将 Map 转为元组列表 "List((I,2), (am,1), ...)"
- sortBy(_._2):按元组第二个元素(次数)升序排序
- reverse:反转列表,变为按次数降序
-
结果:'wordList' 为 "List((I,2), (scala,2), (am,1), (studying,1), (like,1))"
步骤 5:输出结果到新文件(原代码未实现,按需求补充)
scala
val writer = new java.io.PrintWriter("result.txt")
wordList.foreach { case (word, count) =>
writer.println(s"$word: $count")
}
writer.close()