文件读写-全文单词统计(下)

37 阅读1分钟

1.创建一个文件 写入英语

2.拆分为单词

  • 使用正则表达式W+ 去拆分字符串 结果是一个list

* \W表示一个非字符(!. ? 空格)

3.统计每个单词出现的次数

  • 新建一个Map("I" -> 0)

  • 对于list中的每个单词

  • 检查他在Map中是否存在?

println(word.map1.contains(word))

4.对结果排序(降序排列)

  • Map本身是无序的 它没有排序功能

  • 如果对它的内容进行排序 那么 我们要把它转换成可以排序的集合:List

  • sortBy排序 根据元祖的第二个值

  • reverse翻转

5.把结果输出到一个新的文件中

import java.io.FileWriter
import scala.reflect.internal.util.NoSourceFile.content


object word02 {
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("test.log").mkString;
    println(content)
    // 2.拆分为单词
    val list = content.split("\W+ ").map(word=>word.toLowerCase) // 使用正则表达式W+ 去拆分字符串 结果是一个list
    // \W表示一个非字符(!. ? 空格)

    //list.foreach(ele => println(ele))
    //3.统计每个单词出现的次数
    // 新建一个Map("I" -> 0)
    val map1 = scala.collection.mutable.Map[String,Int]()
    // 对于list中的每个单词
    list.foreach(word =>{
      //检查他在Map中是否存在?
      //println(word.map1.contains(word))

      if(map1.contains(word)){
        map1(word)+=1 //存在 把他的值+1
      }else{
        map1(word)=1 //不存在 把他的值设为1
      }
    })

    //4.对结果排序(降序排列)
    //Map本身是无序的 它没有排序功能
    //如果对它的内容进行排序 那么 我们要把它转换成可以排序的集合:List
    //sortBy排序 根据元祖的第二个值
    //reverse翻转
    val wordList = map1.toList.sortBy(_._2).reverse

    //5.把结果输出到一个新的文件中
    val fileWriter = new FileWriter("result.txt")
    wordList.foreach(el => {
      fileWriter.write(s"${el._1} - ${el._2 }\n")
    })

    fileWriter.close()


  }

}