Java String: проверка последовательных букв или цифр

java string

1150 просмотра

3 ответа

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

Пример:

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 Nel Источник Размещён: 08.11.2019 11:09

Ответы (3)


1 плюс

Решение

Вам нужна только 1 строка:

binaryString.split("1(?=1)").length() - 1;
Автор: Bohemian Размещён: 20.08.2016 12:44

2 плюса

попробуйте запустить цикл for для размера один меньше длины строки

 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;
        }
    }
}
Автор: Saurabh Kataria Размещён: 20.08.2016 10:18

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;
              }       
          }
       }
Автор: D.Karthikeyan Размещён: 20.08.2016 11:34
Вопросы из категории :
32x32