站点图标 度崩网-几度崩溃

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

package constxiong.interview;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 统计一段长字符串中某字符串的出现次数 * @author ConstXiong * @date 2019-11-13 11:01:22 */public class TestCountWordTimesInText {public static void main(String[] args) {String text = "统计一CX段长CX字符串中某字符串的出C现X次cx数";String word = "CX";System.out.println(countWordTimesByCutString(text, word));System.out.println(countWordTimesByReplace(text, word));System.out.println(countWordTimesByRegex(text, word));//正则匹配,需要注通配符的使用对结果的影响}/** * 截取字符串统计字符串出现次数 * @param text * @param word * @return */public static int countWordTimesByCutString(String text, String word) {int times = 0;if (!isEmpty(text) && !isEmpty(word)) {String subText = text;int index = -1;int wordLength = word.length();while (subText.length() >= wordLength && (index = subText.indexOf(word)) > -1) {subText = subText.substring(index + wordLength);times++;}}return times;}/** * 通过替换字符串,统计字符串出现次数 * @param text * @param word * @return */public static int countWordTimesByReplace(String text, String word) {int times = 0;if (!isEmpty(text) && !isEmpty(word)) {times = (text.length() - text.replace(word, "").length()) / word.length();}return times;}/** * 通过正则表达式,统计字符串出现次数 * @param text * @param word * @return */public static int countWordTimesByRegex(String text, String word) {int times = 0;if (!isEmpty(text) && !isEmpty(word)) {Pattern p = Pattern.compile(word);Matcher m = p.matcher(text);while (m.find()) {times++;}}return times;}/** * 字符串是否为空 * @param str * @return */private static boolean isEmpty(String str) {return str == null || str.length() == 0;}}