0

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

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

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

4

4 回答 4

2

您正在寻找:

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

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

于 2013-02-05T14:20:10.777 回答
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.
}
于 2013-02-05T14:41:46.840 回答
1

以下正则表达式可能对您有用;

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

"^[+-]?\\d+(?:\\.?\\d+)$"
于 2013-02-05T14:18:09.173 回答
0

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

于 2013-02-05T14:24:34.650 回答