【问题标题】:Find if there are two specfic characters in a string查找字符串中是否有两个特定字符
【发布时间】:2014-11-24 19:08:15
【问题描述】:

我正在做一些 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; 

如果给定的字符串(str)中包含“bob”,则该问题要求返回 true,但中间字符不需要是“o”。上面的代码对三个字符的字符串返回 true 满足条件的长度,如“bob”或“bbb”,但对于长度超过该条件的字符串为假,即“bobdfgkabcb”。我确实花了一整天的时间试图解决这个和另一个类似的问题,所以我很感激被告知为什么它错了。

谢谢。

【问题讨论】:

  • @TheLostMind 或第一个!
  • 而且你不应该在 else 块中返回 false。这个else 将在第一次迭代中中止你的循环。你应该删除它。
  • 这个练习禁止使用正则表达式吗?
  • 啊,谢谢!我知道对于知道的人来说,这将是一件愚蠢而明显的事情。另外我不认为正则表达式是被禁止的,但如果我搞砸了,我应该再练习一下这个级别的东西:) 谢谢@TheLostMind 等人。
  • 如果第一个str.charAt(i+2)=='b' 是真的,你会希望第二个str.charAt(i+2)=='b' 也是真的。

标签: java string char substring


【解决方案1】:

将您的代码更改为:

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.*")

【讨论】:

  • 如果只是第一个和第三个字符,是否需要循环?当然,如果它 必须 长度为 3 个字符,那么它可以是一个简单的 if。除非我理解错了。所以从if(str.length() &gt; 3) return false;开始
  • @Yann4 - 我认为 Op 还想检查字符串 dadsabobsada。我们可以使用一个简单的正则表达式,但我认为 OP 不会理解这一点。
  • 在问题中它说“但是对于比它更长的字符串是错误的,即“bobdfgkabcb”。”
【解决方案2】:

你可以使用它:

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;
  }

【讨论】:

    【解决方案3】:

    遇到字符串错误,所以这是我的解决方案:

    public boolean bobThere(String str) {
    boolean returner = false;
    if(str.contains("bob")){
      return true;
    }
    for(int i = 0; i < str.length() - 2; i++){
      if(str.charAt(i) == 'b'){
          if(str.charAt(i + 2) == 'b')
           returner = true;
     
      }
    }
    if(returner == true){
      return returner;
    }
    return false;
    }
    

    如果出现错误,将长度减去第二个变量的位置。

    【讨论】:

      【解决方案4】:

      这是一个使用 String 的 indexOf() 方法的实现。

      public boolean bobThere(String str) {
            int c=str.indexOf('b');
            int l=str.length();
            for(;c<l-2 && c!=-1;c=str.indexOf('b',c))
            {
            if(str.charAt(c+2)=='b') 
            return true;
            c++;
            }
            return false;
          }
      

      【讨论】:

        【解决方案5】:
        public boolean bobThere(String str) {
            if(str.length()<3)
                return false;
            else {
                for(int i=0;i<str.length()-2;i++){
                    if(str.charAt(i)=='b'&&str.charAt(i+2)=='b') return true;
                }
            }
            return false;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-15
          • 2015-11-04
          相关资源
          最近更新 更多