我想使用Scanner.next()获取一个字符串,看看它是否包含数字。我使用正则表达式检查字符串是否包含除数字之外的任何内容。如果字符串是硬编码的,则正则表达式可正常工作,但从键盘获取时则不能正常工作。我期望将5的输入检测为数字,但事实并非如此。请告诉我为什么。我的代码:
import java.util.Scanner;
public class Error {
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
int num = 0;
String input = "";
boolean isStringNumber = true;
System.out.println("\nPlease enter a number only...");
input = inp.nextLine();
isStringNumber = input.contains("[^0-9]+");
if (isStringNumber == false) {
System.out.println("\nYou entered a non number " + input);
}
}
}
答案 0 :(得分:1)
contains
使用String
字面值作为参数。请改用matches
isStringNumber = input.matches("[0-9]+");
或只是
isStringNumber = input.matches("\\d+");
BTW:Scanner
有nextInt
方法接受整数值
答案 1 :(得分:0)
代替isStringNumber = input.contains("[^0-9]+");
尝试isStringNumber = input.matches("[0-9]+");