2016-08-20 4 views
0

Проблема: Я играю в Java, и я пытаюсь подсчитать последовательные «символы» внутри строки.Java String: проверка на последовательные буквы или цифры

Пример:

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

String binaryString = Integer.toBinaryString(n); 

Приведенный выше код возвращает двоичную строку целочисленного значения, введенного. Если мы введем номер 5, это вернет: 101

Теперь я хочу прокрутить строку и проверить, есть ли в строке строки 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; 
      } 
     } 
    } 

Но это, очевидно, бросает ArrayIndexOutOfBounds как i+1 будет производить несколько больше, чем длина массива.

Заранее благодарю вас за ответы.

Owen

+2

, а как насчет binaryString.length() - 1 в вашем случае? :) – kolboc

ответ

1

Вам нужно только 1 линия:

binaryString.split("1(?=1)").length() - 1; 
+0

Это такой хороший ответ. спасибо, ты много смысла! –

2

попытайтесь выполнить цикл по размеру один меньше, чем длина 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

Спасибо, это помогло! –

+0

Рад, это помогло! –

0

Мы можем еще упростить код с помощью и оператора

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