2014-09-30 223 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; 
    } 
相关问题