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

时间:2025-02-18 15:11:07
import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringChar { public static void main(String[] args) { String content = "这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京," + "这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海," + "这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海," + "这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海,这里是上海," + "这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州," + "这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州,这里是杭州," + "这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京,这里是北京。"; String keyword = "北京"; //方式1 indexOf()方法是一个执行速度非常快的方法,subString()是采用了时间换空间技术,因此速度相对快。 Long time1 = System.currentTimeMillis(); int a = charNum1(content, keyword); Long time2 = System.currentTimeMillis(); System.out.println("出现次数:" + a + "======方式1耗时:" + (time2 - time1) + "ms"); //方式2 split()方法功能强大,但是效率较差。 Long time3 = System.currentTimeMillis(); int b = (content + "@").split(keyword).length - 1;//如果关键字在文章的末尾就会少一次 所以这里+"@" Long time4 = System.currentTimeMillis(); System.out.println("出现次数:" + b + "======方式2耗时:" + (time4 - time3) + "ms"); //方式3 使用正则校验实现 Long time5 = System.currentTimeMillis(); int c = charNum3(content, keyword); Long time6 = System.currentTimeMillis(); System.out.println("出现次数:" + c + "======方式3耗时:" + (time6 - time5) + "ms"); //方式4 indexOf()方法是一个执行速度非常快的方法 Long time7 = System.currentTimeMillis(); int d = charNum4(content, keyword); Long time8 = System.currentTimeMillis(); System.out.println("出现次数:" + d + "======方式4耗时:" + (time8 - time7) + "ms"); //方式5 replace()方法实现 Long time9 = System.currentTimeMillis(); int e = charNum5(content, keyword); Long time10 = System.currentTimeMillis(); System.out.println("出现次数:" + e + "======方式5耗时:" + (time10 - time9) + "ms"); } /** * 关键词条在文章中出现次数 * * @param content * @param keyword * @return */ public static int charNum1(String content, String keyword) { int len = keyword.length(); int num = 0; while (content.indexOf(keyword) != -1) { content = content.substring(content.indexOf(keyword) + len); num++; } return num; } /** * 关键词条在文章中出现次数 * * @param content * @param keyword * @return */ public static int charNum3(String content, String keyword) { int count = 0; Pattern p = Pattern.compile(keyword); Matcher m = p.matcher(content); while (m.find()) { count++; } return count; } /** * 关键词条在文章中出现次数 * * @param content * @param keyword * @return */ public static int charNum4(String content, String keyword) { int count = 0; int index = 0; while ((index = content.indexOf(keyword, index)) != -1) { index = index + keyword.length(); count++; } return count; } /** * 关键词条在文章中出现次数 * * @param content * @param keyword * @return */ public static int charNum5(String content, String keyword) { String a = content.replaceAll(keyword, ""); int count = (content.length() - a.length()) / keyword.length(); return count; } }