统计字符串中某个字符的出现次数


引言:统计字符串中某个字符的出现次数其实可以直接使用apache commons lang包中的StringUtils.countMatches()方法,但觉得写的有点麻烦了,就自己实现了一个完成类似功能简单的方法

1. 不废话,先代码:

1、TestCountMatches 类:

package test;

public class TestCountMatches {

    public static void main(String[] args) {
        System.out.println(countMatched("abcdeeeee", "e"));
        System.out.println(countMatched("abcdeeab", "ab"));
    }

    /**
     * 统计出现次数
     * @param string 目标字符串
     * @param sub 目标子字符串
     * @return
     */
    public static int countMatched(String string, String sub){
        //判空,为空直接返回0,表示不存在
        if(StringUtil.isEmpty(string) || StringUtil.isEmpty(sub)){
            return 0;
        }
        int count = 0;
        int index;
        // 循环一次将出现的字符串索引向后移一位,计数器+1,并截取原字符串索引+1的字符串,
        // 如“abcdeeeee”第一次循环找到“e”索引4,substring(4+1)方法截取后得到新的字符串“eeee”,
        // 循环第二次找到“e”的索引0,substring(0+1)方法截取后得到新的字符串“eee”,,,以此类推
        while((index = string.indexOf(sub)) > -1){
            count++;
            string = string.substring(index + 1);
        }
        return count;
    }

}

2、StringUtil工具类:

package test;

public class StringUtil {

    /**
     * 判断字符串是否为空
     * @param string
     * @return
     */
    public static boolean isEmpty(String string){
        if(string == null || "".equals(string.trim())){
            return true;
        }
        return false;
    }

}

运行结果

2. 再看一下Apache 提供的工具类apache commons lang方法countMatches():

public static int countMatches(final CharSequence str, final CharSequence sub) {
        if (isEmpty(str) || isEmpty(sub)) {
            return 0;
        }
        int count = 0;
        int idx = 0;
        while ((idx = CharSequenceUtils.indexOf(str, sub, idx)) != INDEX_NOT_FOUND) {
            count++;
            idx += sub.length();
        }
        return count;
    }

其实思路差不多,理解了最好自己动手写一下


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM