1.读入一个文件
格式:scala.io.Source.formFile(文件名) 作用:读入一个文件
如果想要直接得到文本文件,使用mkString方法即可。
Source.fromFile().mkString方法
//1.读test.txt
val content = scala.io.Source.fromFile("./test.txt").mkString
println(content) //I am learning scala. I like scala.
2.对字符串进行拆分
split方法
//2.对test.txt的字符串进行拆分
val rst = content.split(' ') // 用空格拆分
rst.foreach(println) // ["I","am","learning",""scala.","I","like","scala."]
3.建立一个空的容器保存键值对数据
1. 拆分字符串后,建立一个Map。key是单词,value是次数。
2. 遍历所有的单词,对每个单词来说:判断单词是否存在,如果存在把对应的key+1;否则就设置对应的key,且value为1
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(word) = 1
}
})
//打印统计结果
map.foreach(println)
4.按照单词出现的频率,从高到低排序
val wordList = map.toList.sortBy(_._2).reverse
5.把结果写入到文件中
val writer = new FileWriter("result.txt")
wordList.foreach(ele=>{
writer.write(s"${ele._1}:${ele._2} \n")
})
writer.close()
//6.打印统计结果
map.foreach(println)
优化代码
val rst = content.split("\W+").map(ele=>ele.toLowerCase)
// \W+ 正则表达式,W表达一个非字符(空格,符号...) +表示一个及以上
// map 把每个单词变小写
完整代码
import java.io.FileWriter
object words01 {
def main(args: Array[String]): Unit = {
//1.读test.txt
val content = scala.io.Source.fromFile("./test.txt").mkString
println(content) // I am learning scala. I like scala.
//2.对字符串进行拆分
val rst = content.split("\W+").map(ele=>ele.toLowerCase)
//3.空的容器保存键值对数据:键:单词,值;次数
val map = scala.collection.mutable.Map[String,Int]()
rst.foreach(word => {
if(map.contains(word)){
map(word) += 1
}
else {
map(word) = 1
}
})
//4.按照单词出现的频率,从高到低排序
val wordList = map.toList.sortBy(_._2).reverse
//5.把结果写入到文件中
val writer = new FileWriter("result.txt")
wordList.foreach(ele=>{
writer.write(s"${ele._1}:${ele._2} \n")
})
writer.close()
//6.打印统计结果
map.foreach(println)
}
}