Предотвратить пользователю ввод номеров в Сканере Java?

1

У меня возникают некоторые проблемы с тем, чтобы пользователь не вводил числа со сканером. Это то, что у меня есть:

package palindrome;

import java.util.Scanner;

public class Palindrome {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String word;
        String inverse = "";

        System.out.println("Write a sentence or word: ");

        while (!input.hasNext("[A-Za-z]+")) {
        System.out.println("Not valid! Try again: ");
        input.nextLine();
    }
        word = input.nextLine();

        word = word.replaceAll("\\s+","");
        word = word.toLowerCase();

        int length = word.length();
        length = length - 1;

        for (int i = length; i >= 0; i--) {
            inverse = inverse + word.charAt(i);
        }

        if (word.equals(inverse)) {
            System.out.println("Is a palindrome.");
        } else {
            System.out.println("Is not a palindrome.");
        }

    }
}

В основном, когда я ввожу слово или предложение, я хочу, чтобы он проверял, есть ли у него какие-либо цифры в любом месте ввода, если он имеет тогда, вам нужно ввести другой, пока это не произойдет. Вот пример вывода:

  • Напишите предложение или слово:

    → 11

  • Недействительно! Попробуй еще раз:

    → 1 тест

  • Недействительно! Попробуй еще раз:

    → тест 1

  • Это не палиндром.

Как вы видите, это работает в большинстве случаев, но когда я ввожу слово FIRST, а затем пробел, за которым следует число, он оценивает его без номера. Я предполагаю, что это происходит потому, что в цикле while проверяется только input.hasNext, но он должен быть input.hasNextLine. Я считаю, что проверить всю строку. Однако, если я это сделаю, у меня не будет никаких аргументов. Помогите оценить!

  • 0
    Можете ли вы быть более ясным, что вы хотите, плз?
  • 0
    Тест @KickButtowski 1 не должен быть действительным (сейчас он выполняется так, как если бы он был), поскольку он содержит число. Я хочу, чтобы он определял его как недопустимый параметр, независимо от того, где находится число в предложении.
Показать ещё 10 комментариев
Теги:
java.util.scanner

1 ответ

2
Лучший ответ

Измените ваше регулярное выражение: [A-Za-z]+ на ^[A-Za-z]+$, чтобы предотвратить номера в любом месте строки ввода

  • 0
    Спасибо, это сработало !!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню