[英]Match number with unlimited decimal places
我想检查用户输入的数字是否有效(X.XXXXX)。
这是我的代码:
if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
System.out.println("This is a double");
}
如果用户输入5.5
,则执行println
。 如果用户在点( 5.5XXX...
)后输入5.55
或带有更多数字的数字,则它将不匹配。
如何定义一个正则表达式来匹配点后所有数字,无论多少?
您的加号+
放错了位置:
^[0-9][.]+[0-9]$
让用户输入
5......1
您需要将其移至末尾:
[0-9][.][0-9]+
锚标记不是必需的,因为您正在使用matches()
。
请注意,此正则表达式过于简单,因为它不支持负数,迫使用户输入.0
表示整数,并且除其他事项外不允许科学计数法。 支持这些功能的正则表达式要复杂得多(有关示例,请参见此问答 )。 您最好使用内置的解析方法来检查输入是否有效。
这是您的正则表达式:
[+-]([0-9]*[.])?[0-9]+
这将接受
其他人已经提到过正则表达式解决方案(Danyal的解决方案到目前为止是最全面的)。 双重的“真实”正则表达式非常复杂! 在这里看到这个问题:
但我认为您是在问一个错误的问题(尽管如此,仍然没有一个解决科学符号):
您想要实现的是回答“此字符串是否是双精度字符串?”。 现在,比正则表达式更具可读性和整体“更好”的东西。
例如,如注释中所述,您实际上可以尝试解析该字符串,看看它是否无法解析。 这也是我链接的问题中的推荐方法,也是您应该遵循的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.