Word Counter
Real-time text statistics: characters, words, lines, paragraphs, and more
Basic Statistics
Structure Statistics
Reading Estimate
What is Word Counter?
Word Counter is a tool for real-time text statistics including character count, word count, line count, and more. Whether you're writing articles, papers, code comments, or social media content, this tool helps you quickly understand your text. It supports mixed Chinese and English text, intelligently recognizing Chinese characters and English words for separate counting. It also provides reading time estimates to help you understand how long it takes readers to finish your content. A word counter helps with articles, essays, SEO copy, social posts, translations, abstracts, and input limits. Counting rules can differ by language and platform: hyphenated words, numbers, CJK text, emoji, punctuation, and contractions are not always treated the same way. When a requirement is formal, the counting method should be clarified. This tool gives a fast working estimate, but the final count may still need to be checked in the target submission system.
How to Use
Basic Operations
- Type or paste your text in the left text box
- Statistics will update in real-time on the right panel
- Adjust options as needed (punctuation, newlines, etc.)
- Clear, paste, or copy text anytime
Counting Rules
- Total characters: All characters including spaces, punctuation, and newlines
- Chinese characters: Counts all Chinese (CJK) characters
- English words: Counts words composed of letters
- Paragraphs: Non-empty text blocks separated by blank lines
- Reading speed: 350 chars/min for Chinese, 225 words/min for English
Use Cases
Technical Principle
Word counting splits on Unicode whitespace using a regular expression close to `text.trim().split(/\s+/).filter(Boolean)` for Latin scripts, which matches ASCII spaces, tabs, newlines, and Unicode separators like U+00A0 (non-breaking space) and U+2028 (line separator). This rule works for English, French, German, and other space-separated languages, but breaks down for Chinese, Japanese, and Thai where there is no whitespace between words. CJK text is therefore counted by character: `[...text].length` rather than `text.length`, because the spread operator iterates Unicode code points and correctly handles surrogate pairs for characters above U+FFFF (e.g. CJK Unified Ideographs Extension B starting at U+20000 and most emoji at U+1F300+). The CJK character class itself is detected with the Unicode property escape `/\p{Script=Han}/u` for Chinese ideographs. The `length` property of a JavaScript string counts UTF-16 code units, not characters, so `'👨👩👧'.length === 8` while the visible glyph is one grapheme cluster made up of three emoji joined by U+200D Zero-Width Joiner. The accurate count uses `Intl.Segmenter('en', { granularity: 'grapheme' })`, available in all modern browsers since 2023; for word-level segmentation in any language including CJK, `Intl.Segmenter(locale, { granularity: 'word' })` follows Unicode Standard Annex #29 and is the most correct option when it is available. Sentence boundaries are detected by `[.!?…。!?]+` followed by whitespace or end-of-string, and paragraphs by two or more consecutive line breaks (`/\n\s*\n/`). Reading and speaking estimates apply published reading-rate constants. Brysbaert (2019) meta-analysis puts adult silent reading at 238 words per minute for non-fiction English, which is why 225-250 wpm is the common UI default. Chinese silent reading averages 350-500 characters per minute. Speaking pace is slower: TED talks average 163 wpm, and audiobook narration targets 150-160 wpm. Twitter's 280-character limit counts CJK and most emoji as 2 weighted characters via its `twitter-text` library, while a regional indicator pair (a country-flag emoji) counts as 4 UTF-16 code units in raw `.length`.
- Whitespace word split: `text.trim().split(/\s+/).filter(Boolean)` works for Latin scripts; fails on CJK and Thai which have no inter-word spaces.
- CJK character count uses `[...text].length` to iterate Unicode code points correctly (handles surrogate pairs above U+FFFF, e.g. extended ideographs and emoji).
- `string.length` returns UTF-16 code units, not graphemes: a 👨👩👧 family emoji has `.length === 8` but is one visible character.
- Most accurate segmentation: `Intl.Segmenter(locale, { granularity: 'word' | 'grapheme' })` implements Unicode Standard Annex #29.
- Reading speed defaults: English 225-250 wpm silent (Brysbaert 2019), Chinese 350-500 chars/min; speaking 150-160 wpm for narration, 163 wpm for TED average.
- Sentence split: `[.!?…。!?]+\s+`; paragraph split: `\n\s*\n`; line count: `text.split('\n').length`.
- Twitter weighs CJK and most emoji as 2 chars against the 280 limit via `twitter-text`; a flag emoji (regional indicator pair) is `.length === 4` in raw UTF-16.
Examples
Short English sentence
Input: Hello world, this is a test.
Total characters: 28
Characters (no spaces): 23
Words: 6
Sentences: 1
Reading time: ~2 seconds (225 wpm)Mixed Chinese and English copy
Input: Hello 你好世界, this is ToolAct.
Total characters: 28
Chinese characters: 4 (你好世界)
English words: 4 (Hello, this, is, ToolAct)
Numbers: 0Twitter post under the 280-character limit
Draft: Launching a new browser-only toolbox today — 112 dev tools,
zero uploads, zero tracking. Check it out at toolact.com.
Total characters: 124 (within 280-char Twitter limit)
Words: 22
Lines: 2Estimate a 5-minute speech
Script: ~750 English words
Reading time: 3 min 20 sec (225 wpm silent reading)
Speaking time: 5 min 0 sec (150 wpm speaking pace)
Paragraphs: 5 | Sentences: 42Check SEO meta description length
Title: "ToolAct - 112 Online Developer Tools, Free and Private"
-> 56 characters (Google shows ~60)
Description: "Format JSON, convert timestamps, generate cron expressions,
and run 100+ more dev tools right in your browser. No uploads."
-> 148 characters (Google shows ~155)FAQ
What does the counter measure?
Total characters, characters without spaces, Chinese characters, English words, numbers, lines, paragraphs, sentences, and estimated reading/speaking time. All update in real time as you type or paste.
How are 'words' defined?
English words are whitespace-separated runs of letters. Chinese characters are detected via CJK Unicode ranges and counted individually. Numbers and symbols are included in the total character counts.
How is reading time calculated?
Default 200-250 words per minute, the average for adult silent reading. Speaking rate is slower (~150 wpm); skimming is faster (300-400 wpm). The number is a rough estimate - actual time depends on content density and reader experience.
Are emoji and special characters counted?
Yes, but note that an emoji like 😀 counts as multiple UTF-16 code units in JavaScript's string length. The counter counts visible characters as they appear in the text.
Why is the line count different from the paragraph count?
Lines are separated by single newlines (typed Enter once). Paragraphs are separated by blank lines (Enter twice). Word processors usually count paragraphs; code editors count lines. The page shows both so you can pick what you need.
Does it count characters in URLs and code?
Yes - everything that isn't whitespace counts. If you only want to count prose (excluding URLs, code blocks, citations), strip those manually before pasting. Some pages have a 'Markdown-aware' mode that ignores syntax characters.
Is my text uploaded?
No. Counting happens in your browser. Pasted text is not transmitted.