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

Java 正则表达式,不包括非数字,java,regex,Java,Regex,在我的程序中,我从控制台读取输入并确定它是否是一个数字数字可以是任何十进制+-。例如,不允许使用123.18p18,因为其中有一个非数字,与-123.18p18相同。做这件事的坏方法(我目前正在做)是检查它是否是double并捕获异常,但是因为我只是解析一个字符串,所以我认为在这里使用regex要好得多。这是我第一天使用它(regex),它看起来像是一种外来语言 我提出了“*\\D+.*”,但它只处理正数 编辑:整数也是可以接受的。以下正则表达式可能适合您 它定义了一个模式,该模式以+或-开头,

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

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


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

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

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

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

下面的正则表达式可能适合您

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

"^[+-]?\\d+(?:\\.?\\d+)$"
您正在寻找:

"^[+-]?\\d+([.]\\d+)?$"
开头可选加号或减号,后跟至少一个数字。在字符串末尾之前,可以选择一个点,后跟至少一个数字。

您要查找的是:

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

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

尝试
double-doubleInstance=double.parseDouble(字符串)并继续…

尝试
double-doubleInstance=double.parseDouble(字符串)并继续…

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

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.
}

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

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.
}


我想不需要科学记数法吧?例如,1.2e3。会影响答案。我想不需要科学符号?例如,1.2e3。将影响答案。未转义的点将匹配任何字符。您必须使用双反斜杠对其进行转义,否则由于转义序列无效,它将无法编译。为什么是非捕获组?现在您所要做的就是修复量词。ATM您也将匹配
“-”。
@jlordo Java中的双斜杠让我哭泣;谢谢:)未转义的点将匹配任何字符。您必须使用双反斜杠转义它,否则它将无法编译,因为转义序列无效。为什么是非捕获组?现在您需要做的就是修复量词。ATM您也将匹配
“-”。
@jlordo Java中的双斜杠让我哭泣;谢谢:)try/catch是留给读者的练习,应该指出这一点。谢谢你!它在问题中说,OP已经在这样做了。他正在寻找一个专门的正则表达式解决方案。try/catch是留给读者的练习,应该指出这一点。谢谢你!它在问题中说,OP已经在这样做了。他正在专门寻找正则表达式解决方案。@ring0:不匹配。它很容易实现,以匹配它也。当然,用户不应该输入
.123
,他应该输入
0.123
,以确保前导点不是打字错误。@user948652:是的,就像我的描述中那样:如果有点,必须至少多一个数字。IMHO
2.
不是一个数字,而
2.0
是一个数字。可以根据您的需要随意更改;)加标点的习惯毁了那个评论,我的意思是“2”不被接受,而“2.0”则被接受。@user948652:这绝对符合
“2”
。你确定没有涉及空格吗?尝试用引号打印您的输入,您将看到前导或尾随空格,您可以
trim()
将其删除。@ring0:不匹配。它很容易实现,以匹配它也。当然,用户不应该输入
.123
,他应该输入
0.123
,以确保前导点不是打字错误。@user948652:是的,就像我的描述中那样:如果有点,必须至少多一个数字。IMHO
2.
不是一个数字,而
2.0
是一个数字。可以根据您的需要随意更改;)加标点的习惯毁了那个评论,我的意思是“2”不被接受,而“2.0”则被接受。@user948652:这绝对符合
“2”
。你确定没有涉及空格吗?尝试用引号打印您的输入,您将看到前导或尾随空格,您可以
trim()
将其删除。