Regex,不包括非数字



在我的程序中,我从控制台读取输入并确定它是否是数字。CCD_ 1。例如,123.18p18是不允许的,因为其中有一个非数字,与-123.18p18相同。做这件事的糟糕方法(我目前正在做)是检查它是否是一个double并捕获异常,但由于我只是在分析一个字符串,我认为在这里使用regex要好得多。这是我使用(regex)的第一天,它看起来像是一种外来语言。

我提出了".*\D+.*",但它只处理正数。

编辑:整数也是可以接受的。

您正在寻找:

"^[+-]?\d+([.]\d+)?$"

可选的开头加或减,后面至少跟一位数字。在字符串的末尾之前,可以有一个点,后面至少跟一个数字。

要解决最初的问题,可以使用java.util.Scanner类。它提供了测试下一个输入是否为整数、双精度等的方法,甚至可以测试下一输入是否符合给定的正则表达式。

import java.util.Scanner;
//...
Scanner s = new Scanner(System.in);
while ( s.hasNext() ) {
    if ( s.hasNextInt() ) {
        int i = s.readInt();
        // Some work.
    } else if ( s.hasNextDouble() ) {
        double d = s.nextDouble();
        // Some work.
    } else if ( s.hasNext(regex) ) {
        String t = s.next(regex);
        // Some work.
    }
    // etc.
}

以下正则表达式可能适用于您;

它定义了一个模式,该模式以+或-开头,后跟零或多个数字,如果有小数点,则必须后跟至少一个数字

"^[+-]?\d+(?:\.?\d+)$"

尝试double doubleInstance = Double.parseDouble(string);并继续。。。

最新更新