scala统计每个汉字出现的次数
时间: 2023-11-26 20:57:36 浏览: 40
以下是一个可以统计汉字出现次数的Scala程序:
```scala
import scala.io.Source
val filename = "input.txt" // 输入文件名
var charCount = Map[Char, Int]() // 字符计数器
// 读取文件内容
for (line <- Source.fromFile(filename).getLines()) {
for (char <- line) {
if (char >= '\u4e00' && char <= '\u9fa5') { // 判断是否为汉字
charCount += (char -> (charCount.getOrElse(char, 0) + 1)) // 更新计数器
}
}
}
// 输出每个汉字出现的次数
for ((char, count) <- charCount) {
println(char + ": " + count)
}
```
该程序首先定义了一个输入文件名和一个字符计数器。然后,它使用Scala的`Source`类从输入文件中读取内容,并对每个字符进行遍历。对于每个汉字,它将计数器中该字符的计数加1。最后,它输出每个汉字出现的次数。注意,该程序假定输入文件是UTF-8编码的。
相关问题
利用scala和RDD统计每个汉字出现的次数
以下是一个示例代码,假设我们有一个文本文件"input.txt",里面包含中文文本。
```scala
import org.apache.spark.{SparkConf, SparkContext}
object CharacterCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("CharacterCount").setMaster("local[*]")
val sc = new SparkContext(conf)
// 读入文本文件,每行转化为一个字符串
val lines = sc.textFile("input.txt")
// 将每个字符串拆分为单个字符
val characters = lines.flatMap(line => line.split(""))
// 过滤掉非中文字符
val chineseCharacters = characters.filter(isChineseCharacter)
// 将每个中文字符映射为一个键值对,值为1
val pairs = chineseCharacters.map(c => (c, 1))
// 按照键(中文字符)分组,将对应的值相加
val counts = pairs.reduceByKey(_ + _)
// 输出结果
counts.foreach(println)
sc.stop()
}
// 判断一个字符是否为中文字符
def isChineseCharacter(c: String): Boolean = {
val p = "^[\\u4E00-\\u9FA5]+$".r
p.findFirstMatchIn(c).isDefined
}
}
```
首先,我们读入文本文件并将每行转化为一个字符串。然后,我们将每个字符串拆分为单个字符,并过滤掉非中文字符。接下来,我们将每个中文字符映射为一个键值对,值为1。最后,我们按照键(中文字符)分组,将对应的值相加,得到每个中文字符出现的次数。最后,我们输出结果。
在这个示例中,我们使用了Scala编程语言和Spark RDD API来进行中文字符计数。我们首先使用flatMap()函数将每个字符串拆分为单个字符,然后使用filter()函数过滤掉非中文字符。接着,我们使用map()函数将每个中文字符映射为一个键值对。最后,我们使用reduceByKey()函数将相同键的值相加,得到每个中文字符出现的次数。
统计一个文本文件中每个单词出现的次数,输出结果按照单词的字典序排序。scala代码
以下是一个统计文本文件中每个单词出现次数,并按字典序排序输出结果的Scala代码:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]) {
val filename = "input.txt" // 输入文件名
val words = Source.fromFile(filename).getLines.flatMap(_.split("\\W+")).map(_.toLowerCase).toList // 读取文件并将内容转化为单词列表
val wordCounts = words.groupBy(identity).mapValues(_.size).toList.sortBy(_._1) // 统计单词出现次数并按字典序排序
wordCounts.foreach { case (word, count) => println(word + "\t" + count) } // 输出结果
}
}
```
代码解释:
1. 首先,我们使用Scala的`Source`对象读取输入文件中的文本内容,并使用`getLines`方法将文本内容按行分割为一个迭代器。
2. 接着,我们使用`flatMap`方法将每行文本内容按空格或标点符号分割为一个单词列表,使用`map`方法将单词转化为小写,最后使用`toList`方法将所有单词合并为一个列表。
3. 然后,我们使用`groupBy`方法将单词列表按照单词内容进行分组,并使用`mapValues`方法将每个单词的出现次数统计出来,最后使用`toList`方法将每个单词的统计结果合并为一个列表。
4. 最后,我们使用`sortBy`方法按照单词的字典序对列表进行排序,并使用`foreach`方法遍历列表,将每个单词的统计结果输出到控制台上。
需要注意的是,上述代码中的`input.txt`文件应该放在与Scala源代码相同的目录下。