字符频率统计
统计文本中每个字符的出现次数和频率分布
统计选项
排序
什么是字符频率统计?
字符频率分析用于统计文本中每个字符出现的次数和占比。它不只看字母,也可能包含数字、标点、空格、中文字符、符号以及不容易被肉眼看到的控制字符。这个工具适合做密码学入门分析、简单替换密码观察、文本特征提取、数据清洗、编码排查、压缩研究和导入内容质量检查。异常频率可能提示隐藏格式字符、乱码、重复分隔符、意外语言或复制粘贴残留。它不会自动解释所有原因,但能把文本的真实字符分布用可量化的方式展示出来,方便继续判断。
使用方法
使用方法
- 在输入区域输入或粘贴文本
- 系统自动统计每个字符的出现次数与频率
- 使用排序选项按字符或次数排列结果
- 调整统计选项(区分大小写、空格、换行符)
统计范围
- 在比较文本之前,先确定是否统计空格、标点符号、大小写和换行符。
- 对于多语言文本,请注意表情符号、组合字符和 CJK 字符的行为可能与单个拉丁字母不同。
使用场景
技术原理
字符频率分析统计文本中每个字符的出现次数。实现方式使用哈希表(JavaScript 中通常为 Map):1)逐字符遍历文本,2)对每个字符递增映射中的计数,3)按计数降序排列,4)渲染直方图(前10-20个字符,其余归入尾部桶)。算法时间复杂度为 O(N),N 为字符数,主要开销是映射的查找和递增操作(在 V8 和 SpiderMonkey 中对常见情况几乎无额外成本)。 一个有用的细节:什么算一个字符?在 JavaScript 中,.length 返回的是 UTF-16 码元数量,而非 Unicode 码点。基本多文种平面之外的字符(表情符号、罕见 CJK 表意文字)以代理对(两个码元)编码,朴素的逐码元计数会将每个代理半部视为独立字符而多算。本页使用 Array.from(text) 或 Intl.Segmenter 来迭代码点(或字形簇),这对大多数用例来说是正确的字符定义。 一个有用的应用:频率分析是破解替换密码(Caesar、Vigenere、简单替换)的经典技术。英文字母频率分布广为人知(E、T、A、O、I、N、S、H、R 为最常见的字母,大致按此顺序),替换密码会保持频率分布不变,因此最常见的密文字母很可能映射到 E,第二常见的映射到 T,依此类推。本页是教学工具而非密码分析工具,但技术原理是相同的。 关于 Unicode 的注意事项:对于 CJK 语言,字符频率分布取决于语料库(现代小说、古典诗词、技术文本)和分析层级(字符、词、二元组、三元组)。对一部现代中文小说进行频率分析会得到一种分布;对《论语》进行分析会得到另一种分布。本页不绑定特定语料库,用户可以对任何文本运行分析。
- 哈希表(JS 中的 Map):遍历文本、递增计数、按计数降序排序、渲染直方图;时间复杂度 O(N),单字符开销极低。
- 代理对:BMP 之外的字符(表情符号、罕见 CJK)是两个 UTF-16 码元;朴素逐码元计数会多算;应使用 Array.from 或 Intl.Segmenter。
- 替换密码密码分析:英文字母频率 E、T、A、O、I、N、S、H、R(按常见度排序);替换密码保持该分布不变。
- CJK 频率:取决于语料库(现代小说、古典诗词、技术文本)和分析层级(字符、词、二元组);本页不绑定特定语料库。
- Top-N 和尾部:默认渲染前10-20个字符,其余归入尾部桶;适合在密集文本中发现规律。
- 大小写敏感:本页提供大小写敏感/不敏感切换;英文通常不区分大小写(E 和 e 是同一个字母的不同写法),CJK 始终不区分大小写(无大小写概念)。
- 性能:计数 O(N),排序 K 个不同字符 O(K log K);本页可在远低于一秒的时间内处理百万字符级文本,符合生产环境模式。
示例
英文文本分析
输入 "hello world" → 结果:'l' 出现 3 次(27.3%),'o' 出现 2 次(18.2%)中文文本分析
输入 "我爱中国我爱北京" → 结果:'我' 和 '爱' 各出现 2 次(25%)频率分布对比
英文文本:'e' 频率最高,约 12.7%;中文:'的' 频率最高,约 4%常见问题
这个分析器统计的是什么?
统计每个不同字符及其出现次数,并按频率排序。常用于密码学分析(英文文本的字母频率有明显规律,从高到低依次为 E、T、A、O)、文本特征分析,以及在粘贴的文档中找出意外字符。
空白字符会被统计吗?
默认会——空格、制表符、换行符各占一行。如果只想看可打印字符,可以勾选「忽略空白」。在自然语言文本中,空白通常是出现频率最高的「字符」(约占 20%)。
统计是否区分大小写?
默认区分——A 和 a 是两个不同的字符。开启「忽略大小写」可将它们合并统计,这在自然语言分析中比较常用。但在分析代码或哈希值时,区分大小写很重要。
支持中文、日文、韩文吗?
支持。每个 CJK 字符都会被独立计数。一段中文的频率表自然会出现成百上千个不同字符,因为中文不存在共享的字母表。本工具通过 grapheme-cluster 计数正确处理 Unicode。
可以查看百分比形式的频率吗?
可以,页面通常会同时显示出现次数和占总数的百分比。在破解简单替换密码时,把字母分布与已知的参考分布作对比会非常有用。
为什么百分比加起来不是 100?
这是四舍五入造成的。每一项都按固定的小数位数取整,相加后总和可能与 100% 相差零点几。要得到精确的总数,请直接累加原始计数。
我的文本会被上传吗?
不会。频率分析在你的浏览器中进行,粘贴的文本不会被传输出去。