boolean (CharSequence text, int startOffset, int endOffset) { boolean isWordStart; if (startOffset != 0) { boolean previousCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(startOffset - 1)) && (startOffset <= 1 || text.charAt(startOffset - 2) != '\\'); boolean previousCharacterIsSameAsNext = text.charAt(startOffset - 1) == text.charAt(startOffset); boolean firstCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(startOffset)); isWordStart = firstCharacterIsIdentifier ? !previousCharacterIsIdentifier : !previousCharacterIsSameAsNext; } else { isWordStart = true; } boolean isWordEnd; if (endOffset != text.length()) { boolean nextCharacterIsIdentifier = Character.isJavaIdentifierPart(text.charAt(endOffset)); boolean nextCharacterIsSameAsPrevious = endOffset > 0 && text.charAt(endOffset) == text.charAt(endOffset - 1); boolean lastSearchedCharacterIsIdentifier = endOffset > 0 && Character.isJavaIdentifierPart(text.charAt(endOffset - 1)); isWordEnd = lastSearchedCharacterIsIdentifier ? !nextCharacterIsIdentifier : !nextCharacterIsSameAsPrevious; } else { isWordEnd = true; } return isWordStart && isWordEnd; }