Scala容器操作

题目

现有文档1–文档6共6份文档,每份文档中包含若干内容,要求如下:
1、从所有文档中提取出包含关键字的所有行,要统计的关键字为:
网络暴力
广告
日本央行
土耳其
加息
美国
比特币
新冠
2、统计每个关键字出现的总次数
3、以如下形式输出:
关键字 (行1/行2/行3/…) 关键字总计出现次数

代码

import java.io.File

import scala.collection.mutable.ArrayBuffer
import scala.io.Source
import scala.util.matching.Regex

object WordCount {
  val keyList: List[String] = List("网络暴力", "广告", "日本央行", "土耳其", "加息", "美国", "比特币", "新冠")
  val printReturn: ArrayBuffer[(String, String, Int)] = new ArrayBuffer[(String, String, Int)]()

  def main(args: Array[String]): Unit = {
    val dirfile = new File("....")
    //    获取目录文件
    val files = dirfile.listFiles()
    //    遍历关键词
    for (k <- keyList) {
      var num: Int = 0
      var rowStr: String = ""
      //    遍历文件
      for (file <- files) {
        var row: Int = 0
        val fileName: String = file.getName
        //        为了防止没有关键词的文章名也显示在结果中,创建一个新的字符串,最后判断检索到的关键词个数变化才添加进结果
        var value: String = ""
        //        声明变量记住现在的关键词个数
        val keyNum: Int = num
        val data = Source.fromFile(file)
        val strdata = data.getLines()
        //      读出文件行
        for (v <- strdata) {
          row += 1
          //进行正则匹配,关键词在一行匹配的次数
          val key: Regex = k.r
          val length = (key findAllIn v).length
          if (length != 0) {
            value += "行" + row + "/"
            num += length
          }
        }
        //          判断文章中有没有关键词,如果没有,就不将文章名添加进结果,有才添加
        if (num != keyNum) {
          rowStr += fileName + ":" + value
        }
      }
      printReturn.addOne((k, rowStr, num))
    }
    printReturn.foreach(i => println(i))
  }
}

结果

(网络暴力,文档1.txt:行1/,1)
(广告,文档1.txt:行3/,2)
(日本央行,文档2.txt:行1/行3/行5/行7/行9/行14/行16/行18/行20/行30/行32/行34/文档3.txt:行35/,19)
(土耳其,文档3.txt:行3/行5/行7/行11/行13/行15/行17/行23/,16)
(加息,文档3.txt:行1/行9/行13/行15/行17/行19/行21/行23/行27/行29/行31/,16)
(美国,文档2.txt:行30/文档3.txt:行19/文档4.txt:行7/行9/行15/行17/行23/行25/行37/行41/行47/行49/文档6.txt:行7/,17)
(比特币,文档5.txt:行1/行3/行7/行9/行11/行13/行15/行19/行21/行25/行27/行29/行31/行33/,37)
(新冠,文档6.txt:行7/,1)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值