EditText要實(shí)現(xiàn)每次刪除固定位置的@的昵稱,其實(shí)就是要在字符串中查找到每個(gè)昵稱的開始和結(jié)束位置。這邊用正則表達(dá)式匹配的每個(gè)昵稱的位置。具體代碼如下
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
EditText editText = (EditText) view;
Editable editable = editText.getText();
//獲取光標(biāo)所在位置
int selectionStart = editText.getSelectionStart();
String content = editable.toString().substring(0, selectionStart);
Pattern pattern = Pattern.compile(".*@.+\\s");
Matcher matcher = pattern.matcher(content);
//查詢字符串中是否有以@開頭和空格結(jié)尾的格式
if (matcher.find() && event.getAction() == KeyEvent.ACTION_DOWN) {
if (TextUtils.equals(matcher.group(), content) && keyCode == KeyEvent.KEYCODE_DEL) {
ArrayList<Integer> indexs = new ArrayList<>();
Pattern patternSub = Pattern.compile("@.+?\\s");
Matcher matcherSub = patternSub.matcher(content);
while (matcherSub.find()) {
indexs.add(matcherSub.start());
}
if (indexs.size() > 0) {
//刪除距離光標(biāo)最近的符合篩選邏輯的字符串
editable.delete(indexs.get(indexs.size() - 1),content.length());
return true;
}
}
}
return false;
}
});
~~~