迭代字符串数组

时间:2016-12-16 12:31:38

标签: java arrays string

如果字符串" cat"则返回true和#34;狗"在给定的字符串中出现的次数相同。

catDog(" catdog")→true

catDog(" catcat")→false

catDog(" 1cat1cadodog")→true

public boolean catDog(String str) {
  int countCat=0;
  int countDog=0;

  for(int i=0;i<str.length()-3;i++){
    if(str.substring(i).startsWith("cat")){
      countCat++;
    }
    if(str.substring(i).startsWith("dog")){
      countDog++;
    }
  }
  if(countCat==countDog){
    return true;
  }
  else{
    return false;
  }
}

我在编写此方法时遇到问题。有人知道为什么我的代码无法正常工作吗? 编辑:代码编译,但它输出错误。例如,如果我放入&#34; catdog&#34;它返回false。

4 个答案:

答案 0 :(得分:1)

使用您发布的示例,因为您的for循环应为for(int i=0;i<str.length();i++){。你也可以使用str.length() - 1和str.length() - 2来获得正确的结果。 -3会给出错误的结果。小例子:string是catdog1dog。结果应该是假的。让我们看看将用-3:

创建的子字符串
catdog1dog
atdog1dog
tdog1dog
dog1dog
og1dog
g1dog
1dog

正如你所看到的-3,最后一个子串是错误的,因此结果也是错误的。这是因为如果查看子字符串,您将看到开始位于char 0而不是1,因此str.length()-1是字符串中的最后一个字符。对不起,如果我的解释不是很好

答案 1 :(得分:0)

根据this question的建议,我会建议使用Apache Commons Lang的StringUtils.countMatches吗?

归功于@A_M

答案 2 :(得分:0)

虽然您的问题可以通过其他策略解决,但我认为您可能只会将2减去 str.length()而不是3。

我希望有用!

答案 3 :(得分:0)

我会做这样的事情:

public boolean catDog(String str){
    return countWords(str, "cat") == countWords(str, "dog");
}


private int countWords(String original, String word){
    int counter = 0;
    boolean searching = true;
    while(searching){
        if(original.indexOf(word) >= 0){
            counter++;
            original = original.substring(original.indexOf(word) + word.length());
        }
        else{
            searching = false;
        }
    }
    return counter;
}