2016-12-27 7 views
0

文字列に表示される回数を数えます.1。繰り返しなし、2.繰り返しが許可されている場合。私は第1のケースではうまく動作するが、第2のケースではうまく動作しない次のコードを試した。カウント数aaaが重複している文字列に表示されます。

public static void main(String[] args) { 
    String str="cbaadaaabefaaaag"; 
    int count=0,count1=0; 
    for(int i=0;i<str.length();i++) 
    { 
     if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a') 
     { 
      count++; 
     } 
    } 
    System.out.println(count); 
    for(int i=0;i<str.length();i++) 
    { 
     if(i==0) 
     { 
      if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a') 
      { 
       count1++; 
      } 
     } 
     else 
     { 
      if(str.charAt(i-1)=='a' && str.charAt(i)=='a' && str.charAt(i+1)=='a') 
      { 
       count1++; 
      } 
     } 
    } 
    System.out.println(count1); 

} 

入力は、それが第1ケースとoverlapingケース2の場合は1でなければならないaaaaである場合、私は試した入力はまた、第1ケースと第2ケース2のための3を与えるべきcbaadaaabefaaaagあります。

+0

あなたのスペルや句読点に少しでも力を入れてください。 –

+0

"i/p"は "input"の略語ですか?これはチャットサイトではないので、スペルアウトしてください。 – Andreas

+0

あなたは素晴らしい作品だと思いますか? 'a'を最後の文字として入力してみてください:' StringIndexOutOfBoundsException' – Andreas

答えて

3

このコードはあなたを助ける必要があります:文字列中に残された唯一の2つの文字がある場合は、葯サブaaa存在できないため

public static void main(String args[]) throws Exception { 

    String str = "cbaadaaabefaaaaaaag"; 
    System.out.println(count(str, true)); 
    System.out.println(count(str, false)); 

} 

public static int count(String str, boolean overlap) { 

    int count = 0; 

    for (int i = 0; i < str.length() - 2; i++) { 
     if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a' 
       && str.charAt(i + 2) == 'a') { 
      if (!overlap) { 
       i += 2; 
      } 
      count++; 
     } 
    } 

    return count; 

} 

条件i < str.length() - 2は、あなたがStringIndexOutOfBoundsExceptionを取得しないことを保証します。

オーバーラップ条件では、現在のインデックスに2つの文字列(aaa)が追加されているため、インデックスは最後に見つかったシーケンスaaaの次の文字を指しています。

+0

はい、デバッグ中に、ご協力いただきありがとうございます。 –

関連する問題