Count words, characters, sentences, lines and paragraphs, with an emoji counted as one
character
The tool loads here. It needs JavaScript, because the work happens on your device.
Your files and your privacy
Your text never leaves the page. Counting is a function running in this browser tab, with
no server involved and no request made as you type. Nothing is saved or restored:
reloading the page or selecting Clear data discards everything, which is what makes the
tool usable on a shared computer.
What this tool does
Live counts for a block of text: characters, characters without spaces, words, sentences,
lines and paragraphs. Characters are counted the way a person counts them, so an emoji
built from several code points counts as one.
It reports six numbers for whatever is in the box, updated on every keystroke: characters,
characters excluding whitespace, words, sentences, lines and paragraphs. The value is in
how each is defined, because counters disagree and a number without a definition is not
much use. A word is a run of characters between whitespace. A character is a grapheme
cluster, so an emoji assembled from several code points counts as one, and so does a
letter written with a separate combining accent. Sentences end at punctuation, lines at
any line break, paragraphs at a blank line.
How to use it
Paste or type into the text box. The six counts under it update as you type; there is no
button to press.
Read the counts against the definitions below, because the number you need depends on
which rule the system enforcing your limit uses.
Select Clear data when you are finished, which empties the box and the undo history
together.
Example use cases
Checking an abstract, an assignment or a job application against a stated word limit.
Checking a page title or meta description against a character budget before publishing.
Counting the rows in a list pasted out of a spreadsheet or a log, using the line count.
Supported input and output
Accepts
Plain text, pasted or typed, in any script
Produces
Six live counts: characters, characters without spaces, words, sentences, lines,
paragraphs
The text itself, copyable to the clipboard or downloadable as text.txt
What this tool will not do
Words are separated by whitespace and nothing else. A hyphenated compound is one word,
and so is a pair of words joined by a comma with no space after it.
Sentence detection is punctuation-based: text followed by a full stop, question mark,
exclamation mark or the full-width CJK equivalents. It cannot tell an abbreviation’s
full stop from a sentence’s, and a line break does not end a sentence.
Paragraphs are blocks separated by a blank line. Single line breaks inside a block do
not start a new paragraph, and whitespace-only blocks are not counted.
In a browser without Intl.Segmenter the character count falls back to code points, which
differs from the grapheme count for emoji built from several code points.
There is no reading time, keyword density, readability score or word-frequency table.
Only the six counts are produced.
Common mistakes
Comparing the character count against a limit enforced elsewhere. Most forms, database
columns and messaging gateways count UTF-16 code units, so an emoji that counts as 1
here can consume 5 there — and the text is rejected at submission rather than here.
Assuming the sentence count understands abbreviations. ‘Dr. Smith went home.’ counts as
two sentences, because the full stop after an abbreviation is the same character as the
one ending a sentence.
Expecting each line of an unpunctuated list to count as a sentence. Ten list items with
no full stops count as ten lines and one sentence.
Reading an unexpected extra line as a bug. A trailing line break creates a final empty
line and it is counted; remove empty lines first if that matters.
Technical notes
Characters are counted with Intl.Segmenter at grapheme granularity, so a sequence a reader
sees as one character counts as one; where Segmenter is unavailable it falls back to code
points. The count without spaces removes every Unicode whitespace character first, then
counts graphemes again. Words are the number of whitespace-separated runs in the trimmed
text. Sentences are counted by matching runs of non-terminator characters followed by any
run of terminators, so repeated punctuation counts once. Lines split on CRLF, LF or a lone
CR, and paragraphs are blocks separated by a blank line.
Frequently asked questions
Does an emoji count as one character?
Yes. Characters are counted as grapheme clusters — the technical name for what a person
would call one character — so an emoji assembled from several code points and a joiner
counts as one rather than five.
What exactly counts as a word?
A run of characters with whitespace on both sides, after leading and trailing whitespace
has been removed. Punctuation does not split a word, so ‘end,start’ with no space is one
word.
How are sentences detected?
By punctuation: text followed by one or more of . ! ? or the full-width CJK forms.
Consecutive marks count once, so ‘Really??’ is one sentence, and text with no
terminating punctuation counts as one.