У меня возникают некоторые проблемы с тем, чтобы пользователь не вводил числа со сканером. Это то, что у меня есть:
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. Я считаю, что проверить всю строку. Однако, если я это сделаю, у меня не будет никаких аргументов. Помогите оценить!
Измените ваше регулярное выражение: [A-Za-z]+
на ^[A-Za-z]+$
, чтобы предотвратить номера в любом месте строки ввода