WordTokenizer implements Tokenizer { @Override public int findTokenEnd(final @NonNull Spanned text, final int cursor) { int i = cursor; int end = getSearchEndIndex(text, cursor); while (i >= 0 && i < end) { if (isWordBreakingChar(text.charAt(i))) { return i; } else { i++; } } return i; } WordTokenizer();  WordTokenizer(final @NonNull WordTokenizerConfig config); @Override int findTokenStart(final @NonNull Spanned text, final int cursor); @Override int findTokenEnd(final @NonNull Spanned text, final int cursor); boolean isValidMention(final @NonNull Spanned text, final int start, final int end); @Override @NonNull Spanned terminateToken(final @NonNull Spanned text); boolean isExplicitChar(final char c); boolean isWordBreakingChar(final char c); boolean isExplicit(final @NonNull CharSequence text, final int cursor); char getExplicitChar(final @NonNull CharSequence text, final int cursor); boolean containsExplicitChar(final @NonNull CharSequence input); boolean containsWordBreakingChar(final @NonNull CharSequence input); boolean onlyLettersOrDigits(final @NonNull CharSequence input, final int numCharsToCheck, final int start);  }
@Test public void testFindTokenEnd() { findTokenEndChecker(0, 4); findTokenEndChecker(1, 4); findTokenEndChecker(2, 4); findTokenEndChecker(3, 4); findTokenEndChecker(4, 4); findTokenEndChecker(5, 13); findTokenEndChecker(6, 13); findTokenEndChecker(13, 13); findTokenEndChecker(14, 22); findTokenEndChecker(15, 22); findTokenEndChecker(22, 22); findTokenEndChecker(23, 25); findTokenEndChecker(24, 25); findTokenEndChecker(25, 25); findTokenEndChecker(26, 29); findTokenEndChecker(27, 29); setTestSpan("Shoulong Li", 14); findTokenEndChecker(4, 4); findTokenEndChecker(5, 13); findTokenEndChecker(6, 13); findTokenEndChecker(13, 13); findTokenEndChecker(14, 14); findTokenEndChecker(15, 22); findTokenEndChecker(30, 37); findTokenEndChecker(31, 37); findTokenEndChecker(38, 40); findTokenEndChecker(41, 44); findTokenEndChecker(42, 44); findTokenEndChecker(43, 44); }