EditText 实现微信每次删除@的一个昵称

EditText要实现每次删除固定位置的@的昵称,其实就是要在字符串中查找到每个昵称的开始和结束位置。这边用正则表达式匹配的每个昵称的位置。具体代码如下


        editText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent event) {
                EditText editText = (EditText) view;
                Editable editable = editText.getText();
                //获取光标所在位置
                int selectionStart = editText.getSelectionStart();
                String content = editable.toString().substring(0, selectionStart);
                Pattern pattern = Pattern.compile(".*@.+\\s");
                Matcher matcher = pattern.matcher(content);
                //查询字符串中是否有以@开头和空格结尾的格式
                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) {
                            //删除距离光标最近的符合筛选逻辑的字符串
                            editable.delete(indexs.get(indexs.size() - 1),content.length());
                            return true;
                        }
                    }
                }
                return false;
            }
        });

    ~~~
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,148评论 0 1
  • 类 !/usr/bin/python -- coding: UTF-8 -- class Employee:'所有...
    SkTj阅读 1,016评论 0 0
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,242评论 0 99
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,431评论 0 3
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,198评论 0 9