Как написать программу на Java, которая ищет ’00’, проверяя каждый символ в строке?

#java #string #character

#java #строка #символ

Вопрос:

Я пытаюсь написать простую программу, которая запрашивает у пользователя ввод, состоящий из нулей и единиц, и проверяет каждый символ в поисках двойного нуля ’00’, если текущий символ равен ‘1’, программа считается находящейся в состоянии «A», и поэтому она выводит состояние исимвол, если символ равен ‘0’, программа находится в состоянии «B», а если есть ’00’, программа находится в состоянии «C», после входа в состояние «C» (после нахождения ’00’) программа не может выйти из этого состояния, это означаетчто он будет продолжать проверять каждый символ, но результирующая строка должна быть символом «State C» , даже если символ представляет собой один ноль или единицу.

На данный момент у меня есть что-то вроде этого

 import java.util.Scanner;
    
public class onesandzeroes {
     public static void main(String[] args) {     
         System.out.println("Write a String that consists of 0 and 1");
           Scanner scanner = new Scanner(System. in);
           String inputString = scanner.nextLine();
           
           for (int index = 0; index < inputString.length();
index  ) {
     char aChar = inputString.charAt(index);
     if (aChar == '0'){
         System.out.println("State B "   aChar);
         
         /* This is the part I'm having trouble with, I was thinking about something like
         
         if(aChar =='0' amp;amp; charAt(index   1 == '0')){
                 System.out.println("State C"   aChar   charAt(index   1);
                 }
         to look for a '0' that is followed by another '0' but it doesn't work
         */
         
     } else{
         System.out.println("State A "   aChar);
     }
}
    }    
    
}
  

Я знаю, что вы, вероятно, можете просмотреть всю строку и проверить, есть ли только ’00’, но я хочу проверять каждый символ по отдельности, за исключением случаев, когда он ищет ’00’

Итак, у меня есть 2 вопроса: Как я могу искать ’00’ в строке? Идеальным способом было бы проверять каждый ‘0’ на наличие следующего ‘0’.

И как я могу заставить программу печатать «Состояние C» символ ТОЛЬКО после того, как будет найден первый ’00’? то есть после того, как программа найдет ’00’, она должна оставаться в состоянии C для ’00’ и любого другого символа, следующего за ним.

Комментарии:

1. inputString.contains(«00») ?

Ответ №1:

может быть, так:

 import java.util.Scanner;

public class StringScanner {

    public static void main(String[] args) {

        System.out.println("Write a String that consists of 0 and 1");

        final var scanner = new Scanner(System.in);

        final String inputString = scanner.nextLine();

        var currentState = State.A;

        for (int index = 0; index < inputString.length(); index  ) {

            final char currentChar = inputString.charAt(index);

            System.out.println("The current char is "   currentChar   " and I'm in state "   currentState);

            if (currentState == State.C) {
                // do nothing because final state has already been reached
                continue;
            }

            if (currentState == State.B) {
                if (currentChar == '0') {
                    // 2 zeros found got into final state :)
                    currentState = State.C;
                } else {
                    //
                    currentState = State.A;
                }
                continue;
            }

            if (currentState == State.A) {
                if (currentChar == '0') {
                    currentState = State.B;
                }
            }
        }
    }

    private enum State {
        A, B, C
    }

}
  

Комментарии:

1. Я ценю все ответы, но ваш был самым полезным, я уже думал о создании строковой переменной с именем «state», но ваше решение намного элегантнее, я не знаю (пока), что означает «enum», поэтому я рассмотрю его сейчас, Спасибо!

Ответ №2:

Во-первых, вы можете проверить inputString.contains("00"); , является ли true write

 inputString.charAt(inputString.indexOf("00")   2);