41. 用kotlin实现统计文件字符个数

作者: 厚土火焱 | 来源:发表于2017-12-01 11:11 被阅读44次

    统计文件字符个数是个常见的程序。今天实现一下。
    首先找到一个要统计的文件。

    val file = "F:\\MyBook\\读书备忘录.txt"
    

    然后建立一个HashMap,用来存储统计的结果。

    val map = HashMap<Char, Int>()
    

    读取文件内容,转换成Char进行遍历统计

    File(file).readText().toCharArray().filterNot(Char::isWhitespace).forEach {
            val count = map[it]
            if (count == null){
                map[it] = 1
            }else{
                map[it] = count +1
            }        
        }
    

    readText()就是读取文件内容了
    toCharArray()转成Char数组
    filterNot(Char::isWhitespace)忽略空格
    遍历的时候,把当前遍历到的map[it]赋给 count ,如果在 map 中没找到这个字符,即 count == null,则为初次记录,map[it] 为 1,否则 map[it] 已经记录过了,在原有计数基础上加1。
    最后输出统计结果

    map.forEach { t, u -> println("字符\"$t\"出现了 $u 次")}
    

    执行效果如下

    统计文件中每个字符的个数
    字符"言"出现了 1 次
    字符"需"出现了 1 次
    字符"最"出现了 1 次
    字符"要"出现了 1 次
    字符"节"出现了 1 次
    字符"。"出现了 1 次
    字符"窄"出现了 1 次
    字符"的"出现了 1 次
    字符"★"出现了 5 次
    字符"("出现了 1 次
    字符"按"出现了 1 次
    字符")"出现了 1 次
    字符"《"出现了 1 次
    字符"》"出现了 1 次
    字符","出现了 2 次
    字符"完"出现了 1 次
    字符"复"出现了 1 次
    字符"后"出现了 2 次
    字符"题"出现了 1 次
    字符":"出现了 1 次
    字符"圣"出现了 1 次
    字符"个"出现了 1 次
    字符"本"出现了 1 次
    字符"-"出现了 2 次
    字符"."出现了 2 次
    字符"0"出现了 4 次
    字符"新"出现了 1 次
    字符"1"出现了 6 次
    字符"2"出现了 3 次
    字符"3"出现了 2 次
    字符"6"出现了 3 次
    字符"边"出现了 1 次
    字符"雅"出现了 1 次
    字符"G"出现了 1 次
    字符"版"出现了 1 次
    字符"重"出现了 1 次
    字符"经"出现了 1 次
    字符"黑"出现了 1 次
    字符"体"出现了 1 次
    字符"字"出现了 1 次
    字符"这"出现了 1 次
    字符"距"出现了 1 次
    字符"章"出现了 1 次
    字符"习"出现了 2 次
    字符"d"出现了 1 次
    字符"f"出现了 1 次
    字符"学"出现了 1 次
    字符"书"出现了 1 次
    字符"照"出现了 1 次
    字符"全"出现了 1 次
    字符"语"出现了 1 次
    字符"o"出现了 1 次
    字符"p"出现了 1 次
    字符"数"出现了 1 次
    字符"读"出现了 1 次
    

    上面的读取还不够简练,我们可以再简化一点,完全不必声明 HashMap。

    val file = "F:\\MyBook\\读书备忘录.txt"
    File(file).readText().toCharArray().filterNot(Char::isWhitespace).groupBy{it}.map {
            it.key to it.value.size
        }.forEach{
            println("字符\"${it.first}\"出现了 ${it.second} 次")
        }
    

    一样可以达到效果。这才是函数式编程。

    相关文章

      网友评论

        本文标题:41. 用kotlin实现统计文件字符个数

        本文链接:https://www.haomeiwen.com/subject/dfvibxtx.html