Как проверить строку, если первые 3 позиции являются буквами - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь проверить строку, введенную пользователем. Пользователь должен ввести строку из 7 символов; первые 3 символа строки должны быть буквами, а последние 4 должны быть цифрами.

Я написал этот фрагмент кода (как метод), но по какой-то причине он принимает первый символ в виде числа (которое, как предполагается, является буквой), а остальные - числа. Например:

Please enter word : **1gy2345**

Это введет l oop, как требуется, и перейдет к следующему методу в main.

Если пользователь вводит слово, длина которого больше 7, он попросит его ввести правильное слово.

Например:

Please enter word : **bob12345**
The word entered is invalid. Please enter a word beginning with 3 letters and ending with 4 numbers ( The word must be 7 characters long ).

Вот мой код:

public static final String solicitationMessage = " Please enter word ";

    public static final String errorMessage = " The word entered is invalid. Please enter a word beginning with 3 letters and ending with 4 numbers ( The word must be 7 characters long ).

    public static final int lengthOfString = 7;

    public static String validateString(String solicitationMessage, String errorMessage, int lengthOfString) {

        System.out.print(solicitationMessage);

        String word = keyboard.nextLine();

        while (!( word.length() == lengthOfString )) {
            if (((word.charAt(0) <= 'a' || word.charAt(0) >= 'z') || (word.charAt(1) <= 'a' || word.charAt(1) >= 'z')
                    || (word.charAt(2) <= 'a' || word.charAt(2) >= 'z'))) {
                System.out.print(errorMessage);
                System.out.print(solicitationMessage);
                word = keyboard.nextLine();
            }
        }
        return word;
    }

Однако, если я введу строку выше 7 предельного символа, он спросит меня снова введите правильную строку, как это должно быть.

Использование регулярных выражений не допускается.

Любая помощь?

Ответы [ 4 ]

0 голосов
/ 20 марта 2020

Поскольку это задание, я дам вам только псевдокод. Вы пытаетесь понять, как это реализовать: p

boolean function validateString(inputString):
    check if inputStrings length is exactly 7:
        if not then return false;
    loop through inputString:
        if the current index is less than 3 and current character is within 'a' - 'z' or within 'A' - 'Z' // check if current character is a letter
           return false;
        else if current index is greater than 2 and current character is not within '0' - '9' // check if current character is not a digit
           return false;
    end loop
    return true
end function

Затем просто вызовите эту функцию в вашем основном методе и напечатайте необходимые сообщения об ошибках.

0 голосов
/ 20 марта 2020

Попробуйте это. Используйте класс Character для проверки символов.

        if (!(Character.isLetter(word.charAt(0)) &&
             Character.isLetter(word.charAt(1)) &&
             Character.isLetter(word.charAt(2)))) {
                 System.out.print(errorMessage);
                 System.out.print(solicitationMessage);
                 word = keyboard.nextLine();
        }


0 голосов
/ 20 марта 2020

Может быть, это поможет.

public static String validateString(String solicitationMessage, String errorMessage, int lengthOfString) {

    System.out.print(solicitationMessage);

    String word = "";
    boolean flag = false;
    while (true) {
        Scanner sc = new Scanner(System.in);
        word = sc.nextLine();
        if(word.length() == lengthOfString){
            for(int i=0;i<word.length();i++){
                int ascii = (int)word.charAt(i);
                if(i<3 && (ascii > 64 && ascii < 123)){
                    flag = true;
                }else if(i>2 && (ascii > 47 && ascii < 58)){
                    flag = true;
                }else{
                    flag = false;
                    System.out.println(errorMessage);
                    break;
                }
            }
            if(flag){
                break;
            }
        }else{
            System.out.println(errorMessage);
        }
    }
    return word;
}
0 голосов
/ 20 марта 2020

Это простое задание для регулярных выражений

[a-zA-Z]{3}[0-9]{4}

Некоторые тестовые случаи: http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyEwsSBlJlY2lwZRiAgICi0ZuYCgw/index.html

Так что это может быть что-то вроде

Pattern pattern=Pattern.compile("[a-zA-Z]{3}[0-9]{4}");
String line;
while(true){
   line= keyboard.nextLine();
   if(pattern.matcher(line).matches()){
     break;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...