字数统计/ 阅读时间

实时统计字数、字符、段落、句子,估算阅读时间。纯本地处理,文本不上传服务器。

输入文本

统计实时更新

统计结果
预计阅读时间中文约 500 字/分钟 · 英文约 200 词/分钟
中文字数汉字、日文、韩文
英文单词空格分隔
字符数含空格
字符数(不含空格)去除空白字符
段落数以空行分隔
句子数以句号/问号/感叹号结尾
UTF-8 字节大小

这个工具有帮到你吗?

代码示例

JavaScript
const text = "Hello 世界";

// CJK characters (Chinese, Japanese, Korean)
const cjk = (text.match(
  /[\u4e00-\u9fff\uac00-\ud7af]/g
) ?? []).length; // 2

// English words
const words = (text.match(
  /[a-zA-Z][a-zA-Z'-]*/g
) ?? []).length; // 1

// Reading time (ms)
const mins = cjk / 500 + words / 200;
Python
import re

text = "Hello 世界"

# CJK characters (Chinese, Japanese, Korean)
cjk = len(re.findall(
    r'[\u4e00-\u9fff\uac00-\ud7af]', text
))  # 2

# English words
words = len(re.findall(
    r'[a-zA-Z][a-zA-Z\'-]*', text
))  # 1

# Characters without spaces
no_sp = len(text.replace(" ", ""))
TypeScript
function wordStats(text: string) {
  const cjk = (text.match(
    /[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]/g
  ) ?? []).length;
  const words = (text.match(
    /[a-zA-Z][a-zA-Z'-]*/g
  ) ?? []).length;
  const paragraphs = text
    .split(/\n\s*\n/)
    .filter(p => p.trim()).length;
  return { cjk, words, paragraphs };
}
Go
import (
    "regexp"
    "unicode"
)

func countCJK(s string) int {
    count := 0
    for _, r := range s {
        if unicode.Is(unicode.Han, r) ||
           unicode.Is(unicode.Hangul, r) {
            count++
        }
    }
    return count
}

var wordRe = regexp.MustCompile(
    `[a-zA-Z][a-zA-Z'-]*`)

常见问题

中文字数是怎么统计的?
本工具统计 Unicode 中的 CJK 统一汉字区块,包括常用汉字(4E00–9FFF)、扩展区A(3400–4DBF)、兼容汉字(F900–FAFF)、日文假名(3040–30FF)以及韩文谚文音节(AC00–D7AF),涵盖中文、日文、韩文字符。
英文单词是如何计数的?
英文单词以连续字母序列(含连字符、撇号)为单位计数。例如 don't 算 1 个单词,state-of-the-art 算 1 个单词。纯数字不计入单词数。
阅读时间是怎么估算的?
中文按约 500 字/分钟估算(成人默读速度),英文按约 200 词/分钟估算。对于中英混排文本,两者分别计算后合计,因此比纯中文或纯英文文本更准确。
段落是如何划分的?
以一个或多个空行(连续换行)分隔的文本块视为一个段落。单个换行不会产生新段落,与 Markdown 和大多数写作软件的处理方式一致。
我的文本会上传到服务器吗?
不会。本工具完全在浏览器端运行,所有计算均在本地完成,文本内容不会离开你的设备,适合处理敏感文档。
字节大小有什么用?
UTF-8 字节大小反映文本实际占用的存储空间,常用于评估数据库字段长度(如 VARCHAR)、API 请求体大小或文件存储空间。中文字符在 UTF-8 下通常占 3 字节。