2014-09-27 104 views
0

我的目标是在Java中,返回字符串中“cat”出现次数的真值等于“dog”出现次数。字符串中子字符串的出现次数(Java)

public boolean catDog(String str) { 
    int matches = 0, matches2 = 0; 
    for(int i = 0; i < str.length()-2; ++i) 
    { 
    if(str.substring(i,i+3)=="cat")++matches; 
    if(str.substring(i,i+3)=="dog")++matches2; 
    } 
    if(matches==matches2)return true; 
    return false; 
} 

它总是返回true(可能不会递增计数器),除非str完全是“狗”或“猫”。为什么?

+1

啊,搞砸了一下周围,发现你需要.equals( “猫”),而不是==。 – 2014-09-27 22:25:03

+0

你有它.. .equals不== == – bwegs 2014-09-27 22:25:42

回答

1

啊,搞砸了一下,发现你需要.equals(“猫”),而不是==。

+1

你也可以使用'.toLowerCase()',否则你不会找到“猫”或“狗!”。 – 2014-09-27 22:26:08

0

因为您正在比较字符串与==,而您应该使用.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(); 
    } 
} 
0

您的想法似乎是正确的,但字符串的比较过去很棘手。尝试

if(str.substring(i,i+3).equals("cat")) ++matches; 

问候 拉尔夫

相关问题