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

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

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} 次")
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容