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

PEvan 2018-03-12 03:05:26

String str = "javajfiewjavajfiowfjavagkljjava";

countString(str,"java");

private static void countString(String str,String s) {
int count = 0;
for(int i= 0; i<=str.length(); i++){
if(str.indexOf(s) == i){
str = str.substring(i+1,str.length());
count++;
}
}
System.out.println(s+"出现的次数为"+count+"次");
}

按道理应该出现4次,为什么我只出现3次
...全文
12163 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
太极鱼鼋 2020-10-17
  • 打赏
  • 举报
回复
引用 1 楼 老鼠拧刀满街找猫的回复:

var str = "javajfiewjavajfiowfjavagkljjava";
var flagStr="java";
var newStr=str.replace(new RegExp(flagStr,"g"),"");
var counter=(str.length-newStr.length)/flagStr.length;
妙!!!!!!
蜉蝣_Jey 2020-10-15
  • 打赏
  • 举报
回复
package com.knight.demo1; public class Test2 { public static void main(String[] args) { String str = "javajfiewjavajfiowfjavagkljjava"; boo(str,"java"); } public static void boo(String str,String a){ int count=0; for (int i = 3; i <str.length() ; i++) { if (str.charAt(i)==a.charAt(3)&&str.charAt(i-1)==a.charAt(2)&&str.charAt(i-2)==a.charAt(1)&&str.charAt(i-3)==a.charAt(0)){ count++; } } System.out.println(count); } }
变速不变道 2019-09-10
  • 打赏
  • 举报
回复
引用 18 楼 lx2324268860的回复:
他从i+1开始截取的,设置i=0;后回到fot循环的迭代器会执行i++,则i就会从1开始了,没有实现归零的愿望。
变速不变道 2019-09-10
  • 打赏
  • 举报
回复
引用 14 楼 梦幻@@人生的回复:
每次你的if 判断为真进去之后,你的str都变改成新的子串,但是你的迭代器 i 没有跟着归零,即没有跟着 str 字符串 同步更新;
解决办法: 在语句 str = str.substring(i+1,str.length()); 之后加上代码 :i=0; 即可。
str = str.substring(i+1,str.length());改成 str = str.substring(i,str.length());然后再加上i=0;就好了😁
变速不变道 2019-09-10
  • 打赏
  • 举报
回复
引用 2 楼 伫望-向北的回复:
你这逻辑有问题,for循环的i一直在加,而你str会减少,当i足够大时,有可能str中前面的java就统计不了。可以试下下面的代码。 private static void countString(String str,String s) { int count = 0; while(str.indexOf(s) != -1){ str = str.substring(str.indexOf(s)+1,str.length()); count++; } System.out.println(s+"出现的次数为"+count+"次"); }
你这个顶多只能返回一次呀
  • 打赏
  • 举报
回复
我好圆 2019-06-18
  • 打赏
  • 举报
回复
count++;下面加一行 i=0; 就解决了。
  • 打赏
  • 举报
回复
注意substring(_)方法对字符串修改后就返回一个新的字符串对象 此时再次遍历字符串应从 0 (首字符)开始
public static void show(String s,String c){
int counter = 0;//计数
int length =s.length();
for (int i = 0; i <length; i++) {
if (s.indexOf(c)==0) {
counter++;
s=s.substring(1,s.length());
} else{
s=s.substring(1,s.length());
}
}
System.out.println(c + " 出现的次数 " + counter);
}
selt791 2019-02-26
  • 打赏
  • 举报
回复
private static void countString(String str,String s) { int count = 0; for(int i= 0; i<=str.length(); i++){ if(str.indexOf(s) != -1){ str = str.substring(str.indexOf(s)+1,str.length()); count++; } } System.out.println(s+"出现的次数为"+count+"次"); }
变速不变道 2018-11-07
  • 打赏
  • 举报
回复
每次你的if 判断为真进去之后,你的str都变改成新的子串,但是你的迭代器 i 没有跟着归零,即没有跟着 str 字符串 同步更新;
解决办法: 在语句 str = str.substring(i+1,str.length()); 之后加上代码 :i=0; 即可。
yunzhuwuxin 2018-11-07
  • 打赏
  • 举报
回复

public static int count(String source, String key) {
int key_index = source.indexOf(key);//key第一个出现的索引位置
int count = 0;
while (key_index != -1) {
key_index = source.indexOf(key, key_index + 1);//从这个索引往后开始第一个出现的位置
count += 1;
}
return count;
}
_Kem 2018-03-18
  • 打赏
  • 举报
回复
public static int select(String str,String s){
		int count = 0;
		char sChar = s.charAt(0);//j
		for(int i = 0;i < str.length()-3;i++){
			if(str.charAt(i) == sChar){
				String strSubString = str.substring(i, i+4);//可能是java
				if(strSubString.equals(s)){
					count++;
					i+=3;
				}
			}
		}
		return count;
	}
我的方法
s0cket 2018-03-14
  • 打赏
  • 举报
回复
public static void main(String[] args){
    String str = "javajfiewjavajfiowfjavagkljjava";

countString(str, "java");
}


private static void countString(String str,String s) {
    int length=str.length();
    int count = 0;
    int k = 0;
    for(int i= 0; i<=length; i++){
        if(str.indexOf(s) == (i-k)){
            str = str.substring(i-k+1,str.length());
            count++;
            k = i+1;
        }
    }
    System.out.println(s+"出现的次数为"+count+"次");
  }
LWHLOVECD 2018-03-14
  • 打赏
  • 举报
回复
string x = "abcsdjavasdijavasjjavkjavaksdhashdjava"; string s="java"; int count = 0; for (int c=0; c < x.Length-s.Length+1 ; ) //主要是这里的长度要注意,必须要加个1,。好好理解清楚字符长度和substring函数中的2个参数既可 { if (x.Substring(c, 4) == s) { count += 1; c += s.Length-1; } else { c += 1; } } Console.WriteLine(count); Console.ReadKey();
qq_38071004 2018-03-13
  • 打赏
  • 举报
回复
引用 6 楼 weixin_41286504 的回复:
可以用split,数组长度减一就是出现的次数
以java结尾的字符串并不会在结尾分一个空串出来,还得加判断吧
qq_38071004 2018-03-12
  • 打赏
  • 举报
回复

你每次返回的字符串位置都是在截取过以后的字符串上的位置,并不是在初始字符串上,第二行中java的位置在第一行的8上,第三行的java在第二行的9上,下一个应该在第三行的7上,值小于了当时的i,所以if里不会处理第四个java。
你可以这样:

注意判断位置的函数是lastIndexOf
Neil.Ren 2018-03-12
  • 打赏
  • 举报
回复
可以用split,数组长度减一就是出现的次数
caojunkeke 2018-03-12
  • 打赏
  • 举报
回复
在线等分,急用
caojunkeke 2018-03-12
  • 打赏
  • 举报
回复
public static void main(String[] args) { String str = "javajfiewjavajfiowfjavagkljjava"; countString(str, "java"); } private static void countString(String str,String s) { int length=str.length(); int count = 0; for(int i= 0; i<=length; i++){ if(str.indexOf(s) == i){ str = str.substring(i+1,str.length()); count++; } } System.out.println(s+"出现的次数为"+count+"次"); }
伫望-向北 2018-03-12
  • 打赏
  • 举报
回复
你这逻辑有问题,for循环的i一直在加,而你str会减少,当i足够大时,有可能str中前面的java就统计不了。可以试下下面的代码。 private static void countString(String str,String s) { int count = 0; while(str.indexOf(s) != -1){ str = str.substring(str.indexOf(s)+1,str.length()); count++; } System.out.println(s+"出现的次数为"+count+"次"); }
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧