• 字符串匹配


      由于工作中用到,之前没有用过,故在此记录一下使用方法。

      java提供了一个简单好用的字符串匹配的类。为了方便调试,我使用SpannableString给关键字换了颜色。直接上代码

            testBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String keyStr = inputEdit.getText().toString();
                    String contentStr = "ABAAAAAaaaaaaaaAAAAAaaaaAaAAAAaadfjaldf";
                    Pattern pattern = Pattern.compile(keyStr,Pattern.CASE_INSENSITIVE);
                    Matcher matcher = pattern.matcher(contentStr);
                    SpannableString span = new SpannableString(contentStr);
                    while (matcher.find()){
                        span.setSpan(new ForegroundColorSpan(Color.RED) , matcher.start() , matcher.end() , Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                    }
                    outPutTextView.setText(span);
                }
            });

      大致过程就是先建一个pattern,把要匹配的关键词——keyStr放进去,并选择模式。然后,从pattern中得到matcher,同时输入要被搜索的内容——contentStr。然后使用while语句,循环查找。每次查找到,都可以通过matcher.start()和matcher.end()来获取关键词的位置。

      其中,每种模式的功能,源码都有注释。文中是用的字母忽略大小写的模式,非常实用!!!

        /**
         * This constant specifies that a pattern matches Unix line endings ('
    ')
         * only against the '.', '^', and '$' meta characters. Corresponds to {@code (?d)}.
         */
        public static final int UNIX_LINES = 0x01;
    
        /**
         * This constant specifies that a {@code Pattern} is matched
         * case-insensitively. That is, the patterns "a+" and "A+" would both match
         * the string "aAaAaA". See {@link #UNICODE_CASE}. Corresponds to {@code (?i)}.
         */
        public static final int CASE_INSENSITIVE = 0x02;
    
        /**
         * This constant specifies that a {@code Pattern} may contain whitespace or
         * comments. Otherwise comments and whitespace are taken as literal
         * characters. Corresponds to {@code (?x)}.
         */
        public static final int COMMENTS = 0x04;
    
        /**
         * This constant specifies that the meta characters '^' and '$' match only
         * the beginning and end of an input line, respectively. Normally, they
         * match the beginning and the end of the complete input. Corresponds to {@code (?m)}.
         */
        public static final int MULTILINE = 0x08;
    
        /**
         * This constant specifies that the whole {@code Pattern} is to be taken
         * literally, that is, all meta characters lose their meanings.
         */
        public static final int LITERAL = 0x10;
    
        /**
         * This constant specifies that the '.' meta character matches arbitrary
         * characters, including line endings, which is normally not the case.
         * Corresponds to {@code (?s)}.
         */
        public static final int DOTALL = 0x20;
    
        /**
         * This constant specifies that a {@code Pattern} that uses case-insensitive matching
         * will use Unicode case folding. On Android, {@code UNICODE_CASE} is always on:
         * case-insensitive matching will always be Unicode-aware. If your code is intended to
         * be portable and uses case-insensitive matching on non-ASCII characters, you should
         * use this flag. Corresponds to {@code (?u)}.
         */
        public static final int UNICODE_CASE = 0x40;
    
        /**
         * This constant specifies that a character in a {@code Pattern} and a
         * character in the input string only match if they are canonically
         * equivalent. It is (currently) not supported in Android.
         */
        public static final int CANON_EQ = 0x80;

    Done.简记于此。

  • 相关阅读:
    Linux命令:head
    Linux命令:less
    分布式锁的实现(java)
    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。(转载)
    SpringBoot实现热加载方式
    报表设计细节
    Pentaho Report Designer 数据大于某值显示红色
    Centos7更改yum源与更新系统
    Centos7安装配置NFS服务和挂载
    centos7上搭建ftp服务器(亲测可用)
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4553486.html
Copyright © 2020-2023  润新知