全文单词统计

31 阅读1分钟

1.深入test.txt这个文件,得到一个长长的字符串:“ i am studying scala, i like scala"

def main(args: Array[String]): Unit = {
  val content = "I am studying scala. I like scala.";

2.把字符串拆分为单词

val list = content.split(" ");

list.foreach(ele => println(ele))

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

val map1 = scala.collection.mutable.Map("I" => 1,"am" => 2)

list.foreach(word =>{

  //println(word,map1.contains(word))
  if(map1.contains(word)){
    map1(word) += 1
  } else{
      map1(word) = 1
// 4. 对结果降序
//  Map本身是无序的,它没有排序的功能
//  如果要对它的内容进行排序,那么,我们要把它转换成可以排序的集合: List
//  sortBy排序:根据元组的第二个值
//

val wordlist = map1.tolist.sortBy(_._2).reverse

wordList.foreach(el => println(el))

整体

object words01 {
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("test.txt").mkString

    //2
    val list = content.split("\W+").map(word=>word.toLowerCase)

    list.foreach(ele => println(ele))

    val map1 = scala.collection.mutable.Map[String, Int]()

    list.foreach(word =>{
       // 检查它在map是否存在
      //println(word,map1.contains(word))
      if(map1.contains(word)){
        map1(word) += 1  // 存在: 把它的值+1
      } else{
        map1(word) = 1
      }
    })

    // 4. 对结果降序
    //  Map本身是无序的,它没有排序的功能
    //  如果要对它的内容进行排序,那么,我们要把它转换成可以排序的集合: List
    //  sortBy排序:根据元组的第二个值
    //

    val wordList = map1.toList.sortBy(_._2).reverse

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