如果字符串" 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。
答案 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;
}