正确结果为5 我代码输出为8 没找出问题 求指教 class Test { public static void main(String[] args) { String s = "sunjavacjavaeeejavapuujavakkkjava"; int count = 0; int x = 0; if (s.contains("java")) { x = s.indexOf("java"); count++; } int y = x + 4; for (int z = 0; z != -1 && y < s.length(); y += 4) { z = s.indexOf("java", y); count++; } System.out.println(count); } }
String s = "javasunjavacjavaeeejavapuujavakkkjavaiijavajava"; int count = 0; int y=0; for (int z = 0; z!=-1 && y < s.length()-4; y = z+4) { z = s.indexOf("java", y); if (z != -1) { count++; }else{ break; } } System.out.println(count);直接循环判断,不等于-1就加一个。 ######的确如此,如果java不是在字符串最后,会多遍历一次,多一次计数。所以,此答案有 bug(漏洞),有待进一步改正,之后再测试。######回复 @rigel : 干脆在if后面加上else{break;}######回复 @孤月殇 : 我也发现了。条件应该改为y<s.length()-4 。这样就可以避免多循环一次######结束条件还是有问题,如果java不是在字符串最后,会多遍历一次######OK了 感谢 还是需要声明z 我开始逻辑错了######
public static void main(String[] args) {
String s = "sunjavacjavaeeejavapuujavakkkjava";
int oldLength = s.length();
s = s.replaceAll("java", "");
int count = (oldLength - s.length()) / 4;
System.out.println(count);
}
######妙!######
public static void main(String[] args) { String s = "sunjavacjavaeeejavapuujavakkkjava"; int y = 0; while (s.indexOf("java")!=-1){ y++; s = s.substring(s.indexOf("java")+4); } System.out.println(y); }######有理。######
package com.company; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String s = "sunjavacjavaeeejavapuujavakkkjava"; Pattern p=Pattern.compile("java"); Matcher m=p.matcher(s); int count = 0; while(m.find()) { count++; } System.out.println(count); } }######用正则不是更方便么 String s = "javasunjavacjavaeeejavapuujavakkkjavajjjjava"; Pattern p = Pattern.compile("java"); Matcher matcher = p.matcher(s); int count = 0; while(matcher.find()) { count++; } System.out.println( count);######的确如此。######
public static void main(String[] args) {
final String originalString = "sunjavacjavaeeejavapuujavakkkjavass";
final String subString = "java";
System.out.println(countStr(originalString, subString));
}
/**
* 查找指定字符串在另一个字符串中出现的次数
*
* @param originalString 被查找的原是字符串
* @param subString 需要查找的子串
* @return 子串出现的次数
*/
private static int countStr(String originalString, String subString) {
// 要查找的子串的长度
final int subStringLength = subString.length();
//开始查找字符串时的起始位置
int fromIndex = 0;
//子串出现的次数
int count = 0;
while ((fromIndex = originalString.indexOf(subString, fromIndex)) > -1) {
fromIndex += subStringLength;
count++;
}
return count;
}
######没错。######public static void main(String[] args) { String str = "sunjavacjavaeeejavapuujavakkkjava"; String[] javas=str.split("java", -1); System.out.println("一共有java:"+(javas.length-1)+"个"); } 一行代码就搞定的事情######把x,y,z的值打印出来。主要是y和z本应该是有关联的,在下一步里:y=z+4。你这样写y是等差递增,而z就有可能重复######已经解决 不需要声明z int y = x + 4; for (; y != -1 && y < s.length(); y+= 4) { y = s.indexOf("java", y); count++; 应该是这样 我逻辑错了 谢谢######没明白呢######遍历就可以简单的解决了, for(int i=0;i<s.length()-4;i++){ if(s[i]='j' && s[i+1]='a'&& s[i+2]='v' && s[i+3]='a') count++ }######回复
@A_zu : z = s.indexOf("java", y); 这里取值有问题######回复
@羊9527 : 确实没对 我在后面多加了几个字符就无限循环了######回复
@羊9527 : 不会啊 最后一个java的位置获取后 角标+4(也就是"java"的长度)后就越界了 不满足y<s.length()了######回复
@A_zu : z!=-1 判断不对,比如你这个例子,最后4个字符是java,那么你任何一次循环IndexOf,z都是大于-1的。######已经解决 不需要声明z int y = x + 4; for (; y != -1 && y < s.length(); y+= 4) { y = s.indexOf("java", y); count++; 应该是这样 我逻辑错了 谢谢######建议改写成下列简洁代码,以求得 任意字符串元素,如“java”, 在 数据字符串 s 中出现的次数。
public class A{
// 方法 frequency 返回 s0 在 s 中出现的次数
static int frequecy(String s, String s0){
int count=0;
int i=0;
while (true){
i = s.indexOf(s0);
if (i != -1){
s = s.substring(i+s0.length());
count++;
} else
break;
}
return count;
}
public static void main(String args[]){
String s = "sunjavacjavaeeejavapuujavakkkjava";
System.out.printf("字符串java出现: %d 次。\n",frequecy(s,"java"));
}
}
输出: 字符串java出现: 5 次。######。。排版版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。