检查Scanner.next()获取的字符串是否包含数字

时间:2014-07-27 16:40:13

标签: java regex java.util.scanner

我想使用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);
        }

    }

}

2 个答案:

答案 0 :(得分:1)

contains使用String字面值作为参数。请改用matches

isStringNumber = input.matches("[0-9]+");

或只是

isStringNumber = input.matches("\\d+");

BTW:ScannernextInt方法接受整数值

答案 1 :(得分:0)

代替isStringNumber = input.contains("[^0-9]+");

尝试isStringNumber = input.matches("[0-9]+");