Scala使用接收给定的一行字符串(例:hello-hello,hi,job-hi,...,依次切割英文逗号和“-”,可以得到每个单词); 统计各单词出现的次数。
时间: 2024-09-18 12:13:22 浏览: 52
Scala 中处理这样的字符串并统计单词出现次数,通常会利用其强大的函数式编程特性。你可以使用 `split` 函数将字符串按照指定的分隔符(这里是逗号和破折号)切割成单词列表,然后使用 `groupBy` 和 `count` 函数分别对单词进行分组并计算每个单词出现的次数。以下是使用 Scala 的示例代码:
```scala
import scala.util.Try
import collection.mutable.Map
def countWords(str: String): Map[String, Int] = {
// 使用 Try-catch 装饰以处理可能出现的异常,如空串或无效输入
val words = Try(str.split("\\s*,\\s*|-")).getOrElse(Nil)
// groupBy 将单词按键值(单词本身)分组,count 计算每个组的数量
val wordCounts = words.groupBy(identity).mapValues(_.size)
wordCounts
}
// 示例:
val inputString = "hello-hello,hi,job-hi,hello hi,world"
val wordCountMap = countWords(inputString)
println(wordCountMap) // 输出:Map(hello -> 3, hi -> 2, job -> 1, world -> 1)
相关问题
Scala中接收给定的一行字符串(例:hello-hello,hi,job-hi,…,依次切割英文逗号和“-”,可以得到每个单词); 统计各单词出现的次数。 测试说明 平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
在Scala中,你可以使用`scala.util.Splitter`来按照指定的分隔符(在这里是英文逗号和破折号)对字符串进行切割,然后使用`Map`数据结构来统计每个单词的出现次数。以下是完成这个任务的一个示例:
```scala
import scala.collection.immutable.Map
import scala.util.Splitter
def wordCount(str: String): Map[String, Int] = {
// 使用Splitter按照逗号和破折号分割字符串
val words = str.split(",").flatMap(_.split("-"))
// 使用Map来存储单词及其计数,初始值为0
val wordCounts = words.map(word => (word, 0)).toMap
// 更新每个单词的计数
words.foreach(wordCounts(_) += 1)
wordCounts
}
// 测试示例
val testInput = "hello-hello,hi,job-hi"
val result = wordCount(testInput)
println(result) // 输出: Map(hello -> 2, hi -> 2, job -> 1)
```
在这个例子中,我们首先创建了一个`words`列表,其中包含了所有经过切割后的单词。接着,我们将这些单词作为键(key),对应的值初始化为0的映射`wordCounts`。最后遍历`words`并更新`wordCounts`。
阅读全文