繁体   English   中英

匹配号码,无限制的小数位数

[英]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]+

这将接受

  • 123
  • 456.789
  • .555等

其他人已经提到过正则表达式解决方案(Danyal的解决方案到目前为止是最全面的)。 双重的“真实”正则表达式非常复杂! 在这里看到这个问题:

有关SO的相关问题

但我认为您是在问一个错误的问题(尽管如此,仍然没有一个解决科学符号):

您想要实现的是回答“此字符串是否是双精度字符串?”。 现在,比正则表达式更具可读性和整体“更好”的东西。

例如,如注释中所述,您实际上可以尝试解析该字符串,看看它是否无法解析。 这也是我链接的问题中的推荐方法,也是您应该遵循的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM