2016-08-20 6 views
0

問題:私はJavaで遊んでいて、文字列内で連続した '文字'を数えようとしています。Java文字列:連続する文字または数字を確認する

例:

Scanner in = new Scanner(System.in); 
int n = in.nextInt(); 

String binaryString = Integer.toBinaryString(n); 

上記のコードが入力された整数値のバイナリ文字列を返します。数字5を入力すると、これが返されます:101

これで、Stringをループし、String内に連続する1があるかどうかを確認します。

for (int i = 0; i < binaryString.lenth(); i++) 
{ 
    // code comes here... 
} 

これを確認する方法がわかりません。私は、次のことを試してみました:

for (int i = 0; i < binaryString.length(); i++) 
    { 
     char charAtPos = binaryString.charAt(i); 
     char charAtNextPos = binaryString.charAt(i+1); 
     if (charAtPos == '1') 
     { 
      if (charAtPos == charAtNextPos) 
      { 
       consecutive += 1; 
      } 
     } 
    } 

しかしi+1は、配列の長さよりも大きな数を生成しますので、これは明らかにArrayIndexOutOfBoundsをスローします。

ご回答いただきありがとうございます。

オーウェン

+2

では、binaryString.length() - 1はどのようにcondidtionにありますか? :) – kolboc

答えて

1

あなたのコードを簡素化することができますstrin

for (int i = 0; i < (binaryString.length()-1); i++) 
{ 
    char charAtPos = binaryString.charAt(i); 
    char charAtNextPos = binaryString.charAt(i+1); 
    if (charAtPos == '1') 
    { 
     if (charAtPos == charAtNextPos) 
     { 
      consecutive += 1; 
     } 
    } 
} 
+0

これは良い答えです。たくさんの感謝をしてくれてありがとう! –

2

は、我々はまだあなたが唯一する必要が使用して、オペレータ

import java.util.Scanner; 
    class StackBinary 
    { 
     public static void main(String args[]) 
     { 
      Scanner in = new Scanner(System.in); 
      String n = Integer.toBinaryString(in.nextInt()); 

      for (int i = 0; i < n.length()-1; i++) 
      { 
       char charAtPos = n.charAt(i); 
       char charAtNextPos = .charAt(i+1); 
       if (charAtPos == '1' && charAtNextPos == '1') 
       { 
        consecutive+=1; 
       }  
      } 
     } 
+0

ありがとう、これは助け! –

+0

うれしそう、助けて! –

0

の長さよりも小さいサイズのいずれかのforループを実行してみてください1行:

binaryString.split("1(?=1)").length() - 1; 
関連する問題