2014-09-27 2 views
0

Java에서 내 목표는 문자열에서 "cat"의 발생 횟수를 true로 반환하는 것이 "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; 
} 

str이 정확히 "dog"또는 "cat"이 아닌 한 항상 true를 반환합니다 (카운터가 증가하지 않을 수도 있음). 왜?

+1

아를 시도, 조금 주위에 엉망이 ("고양이") .equals이 필요하다는 것을 발견하지 ==. –

+0

당신은 그것을 가지고 있습니다. .equals not == – bwegs

답변

1

아, 조금 뒤죽박죽이고 ==가 아니라 .equals ("cat")가 필요하다는 것을 알았습니다.

+1

당신은'.toLowerCase()'를 사용할 수도 있습니다. 그렇지 않으면 "Cats"또는 "DOGS!"를 찾지 못할 것입니다. –

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; 

인사말 랄프