子字符串在字符串中的出现次数(Java)

子字符串在字符串中的出现次数(Java),java,string,substring,equals,Java,String,Substring,Equals,在Java中,我的目标是返回true,即字符串中出现“cat”的次数等于出现“dog”的次数 公共布尔catDog(String str){ int matches=0,matches2=0; 对于(int i=0;i

在Java中,我的目标是返回true,即字符串中出现“cat”的次数等于出现“dog”的次数

公共布尔catDog(String str){
int matches=0,matches2=0;
对于(int i=0;i

除非str正好是“dog”或“cat”,否则它总是返回true(可能不是递增计数器)。为什么?

啊,把事情弄得一团糟,发现你需要.equals(“cat”),而不是==。

因为你在比较字符串和
=
,而你应该使用
.equals(…)

此外,不需要扫描字符串,每个字符串扫描一个字符。只用

public int indexOf(String str, int fromIndex)
这样,您可以在每一步跳过更多字符。例如:

for (int i = 0; i < str.length(); /* do nothing */)
{
  int x == str.indexOf("dog", 0);
  if (x == -1)
  {
    // no more occurrences
  }
  else
  {
    i = x + "dog".length();
  }
}
for(int i=0;i
您的想法似乎是正确的,但字符串的比较过去很棘手。试一试

if(str.substring(i,i+3).equals("cat")) ++matches;
问候
拉尔夫

啊,搞砸了一点,发现你需要的是。等于(“猫”),而不是==。你得到了。equals not==您还可以使用
.toLowerCase()
,否则您将找不到“猫”或“狗!”。
if(str.substring(i,i+3).equals("cat")) ++matches;