words(split)

24 阅读1分钟

split

1.读入paper.txt的内容 长的字符串

2.对字符串进行拆分 把句子变成一个一个单词

3.空的容器保存键值对数据:键:单词,值:次数

4.打印统计结果

package words

import java.io.FileWriter

object words01 {
  def main(args01: Array[String]): Unit = {
    //1.读入paper.txt的内容  大大的长长的字符串
    //    Source.fromFile().mkString
    //2.对字符串进行拆分 把句子变成一个一个单词
    //   split

    //1
    val content = scala.io.Source.fromFile("./test.txt").mkString
    println(content)


    //val content = "I like scala."
    //2.对字符串进行拆分:使用空格,对这个长长的字符串做拆分,得到了一个数组,每个元素都是一个单词
    // map 把每个单词都变小写
    val rst = content.split("\W+").map(ele=>ele.toLowerCase)
    //["I", "like","scala."]
    //投票,画正字




    //3.空的容器保存键值对数据:键:单词,值:次数
    val map = scala.collection.mutable.Map[String, Int]()
    rst.foreach(word => {
      //如果word在map中存在,就把值+1
      if(map.contains(word)){
        map(word) += 1
      }
      else{//如果word在map中不存,就把值设为1
        //map += wore -> 1
        map += word -> 1
      }
    })

    //4.排序
    //map.foreach(println)
    //按照单词出现的频率,从高到低排序
    //map是无序的,不能做排序
    //list是可以排序的
    val wordLists = map.toList.sortBy(_._2).reverse


    //5.把结果写入到文件中

    val writer = new FileWriter("result.txt")
    wordLists.foreach(ele => {
      writer.write(s"${ele._1}:${ele._2} \n")
    })
    writer.close()

    rst.foreach(println)
  }

}