2014-09-30 141 views
0

我正在做一些java練習,我無法弄清爲什麼答案不是這個。查找字符串中是否有兩個特定字符

for (int i=0;i<str.length()-2;i++) { 
    if ((str.charAt(i)=='b') && (str.charAt(i+2)=='b')) { 
    return true; } 
    else return false; 
    } 
return false; 

的問題要求返回true,如果給定的字符串(STR)中有「鮑勃」,除了中間人物不需要是「O」。以上代碼對於長度符合條件的三個字符的長度爲「bob」或「bbb」的三個字符的字符串返回true,但對於比「bobdfgkabcb」更長的字符串則爲false。我一整天都在努力解決這個問題和另一個類似的問題,所以我很樂意告訴你爲什麼錯了。

謝謝。

+0

@TheLostMind或第一! – Yann 2014-09-30 08:24:24

+0

你不應該在else塊中返回false。這個'else'會在第一次迭代中放棄你的循環。你應該刪除它。 – Tom 2014-09-30 08:24:27

+0

這個練習是否被禁止使用正則表達式? – laruiss 2014-09-30 08:31:16

回答

3

你的代碼更改爲:

for (int i=0;i<str.length()-2;i++) { 
    if ((str.charAt(i)=='b') && (str.charAt(i+2)=='b')) {// check 1st and 3rd character, 2nd and 4th character etc 
    return true; } 
    } 
return false; 

或者你可以嘗試的正則表達式是這樣的:str.matches(".*b[a-zA-Z]b.*")

+0

如果只是第一個和第三個字符,它是否需要循環?當然,如果*有*爲3個字符,它可以是一個簡單的if。除非我誤解。因此,從'if(str.length()> 3)返回false開始;' – Yann 2014-09-30 08:27:09

+0

@ Yann4 - 我認爲Op也想檢查字符串'dadsabobsada'。我們可以使用一個簡單的正則表達式,但我不認爲OP會理解這一點。 – TheLostMind 2014-09-30 08:28:37

+0

在它所說的問題中「但對於比」bobdfgkabcb「更長的字符串是錯誤的。」 – Yann 2014-09-30 08:29:35

0

你可以使用它:

public boolean bobThere(String str) { 
    for (int i = 0 ; i < str.length()-2 ; i++){ 
    if(str.substring(i , i+1).equals("b") && str.substring(i+2 , i+3).equals("b")) 
    return true;} 

    return false; 
    } 
相關問題