字符串中某一字符出现的次数统计
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;
}
}