Java 统计一个字符串,在另一个字符串中出现的次数 Java 统计字符串出现的次数
一、统计某个字符串出现的次数 思路
1、完整字符串和需要判断的字符串转为char数组
2、定义3个变量:length 判断字符串长度:count ;计数:cur 判断的字符串下标。
3、遍历完整字符串数组,逐个和需要判断的字符串比较
4、若字符串相等,且 下标 = 判断的字符串长度,则找到一个字符串,计数+1;
字符串相等,下标 != 判断字符串长度,找到部分字符串,下标+1
通过图解如下:
4、代码实现如下:
@Test
public void test3() {
String str = "12311123123"; // 完整字符串
String s = "123"; // 判断字符串
char[] charArray = str.toCharArray();
char[] charArray2 = s.toCharArray();
int length = charArray2.length; // 需要判断的字符串长度
int count = 0 ; // 计数
int cur = 0 ; // 数组下标
for (char c1 : charArray) {
char c2 = charArray2[cur];
if(c1 == c2) {
if(cur == (length-1)) {
count ++ ; // 找到一个字符串,计数+1
cur = 0 ;
}else {
cur++; // 找到部分,下标+1
}
}
}
System.out.println("统计到字符串的个数:count333="+count);
}
5、上述代码有错误,若字符串不相等,没有匹配到,应该将下标重置为0,cur=0;故正确的代码如下:
@Test
public void test3() {
String str = "1231132323"; // 完整字符串
String s = "123"; // 判断字符串
char[] charArray = str.toCharArray();
char[] charArray2 = s.toCharArray();
int length = charArray2.length; // 需要判断的字符串长度
int count = 0 ; // 计数
int cur = 0 ; // 数组下标
for(int x = 0 ; x < charArray.length ; x++) {
char c1 = charArray[x];
char c2 = charArray2[cur];
if(c1 == c2) {
if(cur == (length-1)) {
count ++ ; // 找到一个字符串,计数+1
cur = 0 ;
}else {
cur++; // 找到部分,下标+1
}
}else {
cur = 0 ; // 没找到,下标置为0
}
}
System.out.println("统计到字符串的个数:count333="+count);
}
6、整理成,工具类的形式
/**
* description: 统计一个字符串,在另一个字符串中出现的次数
* @param str 完整字符串
* @param s 判断字符串
* @return int
* @version v1.0
* @author w
* @date 2021年4月26日 下午2:28:37
*/
public static int count(String str , String s) {
if(StringUtils.isBlank(str) || StringUtils.isBlank(s)) {
return 0 ;
}
char[] charArray = str.toCharArray();
char[] charArray2 = s.toCharArray();
int count = 0 ;
int cur = 0 ;
int length = s.length();
for (char c : charArray) {
char c2 = charArray2[cur];
if(c == c2) {
if((cur+1) == length) {
// 找到一个 count++
count ++ ;
cur = 0 ;
}else {
// 找到部分,cur++ ,继续判断下一个
cur++ ;
}
}else {
// 未匹配到,cur重置为0
cur = 0 ;
}
}
return count ;
}