induwara.lk
induwara.lkText · Writing

Word Counter — words, characters, and reading time

Paste or type any text to see words, characters, sentences, paragraphs, and reading time update in real time. Runs entirely in your browser, handles Sinhala/Tamil/CJK input, and double-checks every count with two independent algorithms. No signup, no ads.

By Induwara AshinsanaUpdated May 11, 2026
Count words & characterslive as you type

Runs entirely in your browser. Nothing is uploaded, logged, or stored.

Words
0
Characters
0
0 without spaces
Sentences
0
Paragraphs
0
Reading time
0s
At 200 WPM
Speaking time
0s
At 130 WPM
Unique words
0
Longest word
Average word length
Average sentence length
Lines
0

Top keywords

Add some text above to see keyword density. Short words (1–2 characters) and pure punctuation are skipped.

Sources: reading rate from Brysbaert (2019), Journal of Memory and Language. Speaking rate from the National Center for Voice and Speech. Sentence/word segmentation follows Unicode TR-29 — see methodology below.

How it works

The counter runs four independent passes over your text. Each pass is a pure function with no side effects, deterministic for a given input, and Unicode-aware so it works for Sinhala, Tamil, CJK, and emoji alongside Latin text.

  1. Words. Trim the input and split on any run of whitespace ( /\s+/). The resulting array length is the word count. A second pass uses /\S+/g to match contiguous non-whitespace runs; when the two methods agree, the "verified" badge lights up. Both methods match Microsoft Word and Google Docs for typical input.
  2. Characters. Two numbers are reported: total characters ( text.length, UTF-16 code units, matching X/Twitter and SMS counters) and characters without spaces. Code-point versus code-unit counting is a common source of disagreement between counters; this tool uses code units because every major social platform does the same.
  3. Sentences. Split on /[.!?。!?]+/ (Latin and CJK terminators) and keep the pieces that contain at least one letter or digit. Abbreviations like "Mr." will be counted as sentence ends — this matches how basic word processors behave and is fast enough to run on every keystroke.
  4. Paragraphs. Split on one-or-more blank lines (/\n\s*\n+/) and count non-empty trimmed pieces. Single-line text counts as one paragraph. Lines (any newline) are reported separately.

Reading timeuses 200 words per minute, the conservative anchor that platforms like Medium and WordPress use. Recent research — Brysbaert (2019), "How many words do we read per minute?", Journal of Memory and Language 109 — puts the adult silent-reading rate for English non-fiction higher, at 238 WPM. The tool shows the conservative number so results stay comparable with other platforms; for a personal estimate, divide by 1.19 to get the research-based figure.

Speaking time uses 130 words per minute, the slow narration rate published by the National Center for Voice and Speech. For conversational speech use ~150 WPM; for audiobook narration, 150–160 WPM. The tool defaults to the slowest rate so speech-prep estimates have a safety margin.

Everything runs client-side. There is no fetch, no localStorage write of text, and no analytics event tied to content. You can put a draft legal document or unreleased manuscript into the counter without it leaving your machine.

Worked examples

Short sentence

"Hello world. This is a test! Is it really?"

  1. Whitespace split: 9 non-empty pieces → words = 9
  2. Characters: 42 total · 34 without 8 spaces
  3. Sentence terminators .!? produce 3 non-empty pieces
  4. Reading time: ceil(9 ÷ 200 × 60) = 3 seconds
  5. Speaking time: ceil(9 ÷ 130 × 60) = 5 seconds
  6. Longest word (after stripping punctuation): "really" (6 chars)

Two paragraphs

"First.\n\nSecond paragraph here."

  1. Words: "First.", "Second", "paragraph", "here." → 4
  2. Characters: 30 total · 26 without the 4 whitespace chars
  3. Sentences: split on .!? gives 2 non-empty pieces
  4. Paragraphs: split on blank lines → 2
  5. Avg word length: 26 ÷ 4 = 6.5 characters

Reading-time boundary

200 single-letter words separated by single spaces

  1. Words = 200
  2. Reading time at 200 WPM: ceil(200 ÷ 200 × 60) = 60 s → 1m flat
  3. At 201 words → 61 s → 1m 01s
  4. At 199 words → 60 s → 1m flat (last-second rounding)
  5. This is the off-by-one boundary all reading-time counters share.

Unicode (Sinhala + emoji)

"café 日本語 🎉 ආයුබෝවන්"

  1. Words: 4 (whitespace split is Unicode-aware via /\S+/)
  2. Characters: 20 in UTF-16 (café=4, spaces=3, 日本語=3, 🎉=2, ආයුබෝවන්=8)
  3. 🎉 is a surrogate pair so it counts as 2 — matches X/Twitter
  4. Sentences: 1 (no terminator → counted as one)
  5. Paragraphs: 1

Frequently asked questions

Sources & references

Related tools

Rate this tool
Be the first to rate

Comments & feedback

Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.

Found a bug, edge case, or want to suggest an improvement?

Email me at [email protected] — most fixes ship within 24 hours.