正则表达式,不包括非数字

时间:2013-02-05 14:13:52

标签: java regex

在我的程序中,我从控制台读取输入并确定它是否为数字。 Numbers can be any decimal +-。例如,由于存在非数字,因此不允许使用123.18p18,与-123.18p18相同。这样做的坏方法(我目前正在做的)是检查它是否是双重并捕获异常,但由于我只是在解析字符串,我认为正则表达式在这里使用要好得多。这是我使用它的第一天(正则表达式),它看起来像是一种外来语言。

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

编辑:整数也可以接受。

4 个答案:

答案 0 :(得分:2)

您正在寻找:

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

开头可选加号或减号,后跟至少一位数。在字符串结束之前,可以选择一个点,后跟至少一个数字。

答案 1 :(得分:2)

要解决您的初始问题,您可以使用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.
}

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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