stri_count_boundaries: Count the Number of Text Boundaries#


These functions determine the number of text boundaries (like character, word, line, or sentence boundaries) in a string.


stri_count_boundaries(str, ..., opts_brkiter = NULL)

stri_count_words(str, locale = NULL)



character vector or an object coercible to


additional settings for opts_brkiter


a named list with ICU BreakIterator’s settings, see stri_opts_brkiter; NULL for the default break iterator, i.e., line_break


NULL or '' for text boundary analysis following the conventions of the default locale, or a single string with locale identifier, see stringi-locale


Vectorized over str.

For more information on text boundary analysis performed by ICU’s BreakIterator, see stringi-search-boundaries.

In case of stri_count_words, just like in stri_extract_all_words and stri_locate_all_words, ICU’s word BreakIterator iterator is used to locate the word boundaries, and all non-word characters (UBRK_WORD_NONE rule status) are ignored. This function is equivalent to a call to stri_count_boundaries(str, type='word', skip_word_none=TRUE, locale=locale).

Note that a BreakIterator of type character may be used to count the number of Unicode characters in a string. The stri_length function, which aims to count the number of Unicode code points, might report different results.

Moreover, a BreakIterator of type sentence may be used to count the number of sentences in a text piece.


Both functions return an integer vector.


Marek Gagolewski and other contributors

See Also#

The official online manual of stringi at

Gagolewski M., stringi: Fast and portable character string processing in R, Journal of Statistical Software 103(2), 2022, 1-59, doi:10.18637/jss.v103.i02

Other search_count: about_search, stri_count()

Other locale_sensitive: %s<%(), about_locale, about_search_boundaries, about_search_coll, stri_compare(), stri_duplicated(), stri_enc_detect2(), stri_extract_all_boundaries(), stri_locate_all_boundaries(), stri_opts_collator(), stri_order(), stri_rank(), stri_sort_key(), stri_sort(), stri_split_boundaries(), stri_trans_tolower(), stri_unique(), stri_wrap()

Other text_boundaries: about_search_boundaries, about_search, stri_extract_all_boundaries(), stri_locate_all_boundaries(), stri_opts_brkiter(), stri_split_boundaries(), stri_split_lines(), stri_trans_tolower(), stri_wrap()


test <- 'The\u00a0above-mentioned    features are very useful. Spam, spam, eggs, bacon, and spam.'
stri_count_boundaries(test, type='word')
## [1] 31
stri_count_boundaries(test, type='sentence')
## [1] 2
stri_count_boundaries(test, type='character')
## [1] 83
## [1] 13
test2 <- stri_trans_nfkd('\u03c0\u0153\u0119\u00a9\u00df\u2190\u2193\u2192')
stri_count_boundaries(test2, type='character')
## [1] 8
## [1] 9
## [1] 20