@Ali 感谢您提供解决方案。
这是一个优化的变体,如果找到了这个词,它会中断。
此解决方案不会创建 Spannable,因为不需要查找单词。
@NonNull
public static String getWordAtIndex(@NonNull String text, @IntRange(from = 0) int index) {
String wordAtIndex = "";
// w = word character: [a-zA-Z_0-9]
final Pattern pattern = Pattern.compile("\\w+");
final Matcher matcher = pattern.matcher(text);
int startIndex;
int endIndex;
while (matcher.find()) {
startIndex = matcher.start();
endIndex = matcher.end();
if ((startIndex <= index) && (index <= endIndex)) {
wordAtIndex = text.subSequence(startIndex, endIndex).toString();
break;
}
}
return wordAtIndex;
}
示例:获取当前光标位置的单词:
String text = editText.getText().toString();
int cursorPosition = editText.getSelectionStart();
String wordAtCursorPosition = getWordAtIndex(text, cursorPosition);
如果要查找所有连接字符(包括标点符号),请改用此方法:
// S = non-whitespace character: [^\s]
final Pattern pattern = Pattern.compile("\\S+");
Java正则表达式文档(正则表达式):https ://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html