Java 匹配无小数位数限制的数字
我想检查用户输入是否是有效的双倍数字(X.XXXXX) 这是我的代码:Java 匹配无小数位数限制的数字,java,regex,Java,Regex,我想检查用户输入是否是有效的双倍数字(X.XXXXX) 这是我的代码: if(textField.getText().matches("^[0-9][.]+[0-9]$")) { System.out.println("This is a double"); } 如果用户输入5.5,则执行println。如果用户输入的5.55或点后有更多数字的数字(5.5XXX…)将不匹配 我如何定义一个正则表达式来匹配点后的所有数字,无论有多少个?您的加号+放错了位置: ^[0-9][.]+[0-9
if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
System.out.println("This is a double");
}
如果用户输入5.5
,则执行println
。如果用户输入的5.55
或点后有更多数字的数字(5.5XXX…
)将不匹配
我如何定义一个正则表达式来匹配点后的所有数字,无论有多少个?您的加号
+
放错了位置:
^[0-9][.]+[0-9]$
允许用户输入
5......1
您需要将其移动到末尾:
[0-9][.][0-9]+
锚定标记不是必需的,因为您使用的是matches()
请注意,这个正则表达式过于简单,因为它不支持负数,强制用户为整数输入
.0
,并且不允许使用科学符号等。支持这些特性的正则表达式要复杂得多(参见示例)。最好使用内置解析方法检查输入是否有效。您的加号+
放错了位置:
^[0-9][.]+[0-9]$
允许用户输入
5......1
您需要将其移动到末尾:
[0-9][.][0-9]+
锚定标记不是必需的,因为您使用的是matches()
请注意,这个正则表达式过于简单,因为它不支持负数,强制用户为整数输入.0
,并且不允许使用科学符号等。支持这些特性的正则表达式要复杂得多(参见示例)。最好使用内置的解析方法检查输入是否有效。这是您的正则表达式:
[+-]([0-9]*[.])?[0-9]+
这是可以接受的
- 123
- 456.789
- .555 等等
- 这是您的正则表达式:
[+-]([0-9]*[.])?[0-9]+
这是可以接受的
- 123
- 456.789
- .555 等等
例如,如注释中所述,您实际上可以尝试解析字符串,并查看是否解析失败。这也是我链接的问题中推荐的方法,也是您应该遵循的方法。其他人已经提到了正则表达式解决方案(Danyal的似乎是迄今为止最全面的)。双人间的“真正”正则表达式相当复杂!请看这里的问题: 但我认为你问的问题是错误的(尽管没有一个问题仍然涉及科学符号): 您想要实现的是回答“这个字符串是双精度的吗?”。在这方面,有些东西比正则表达式可读性强得多,而且总体上“更好”
例如,如注释中所述,您实际上可以尝试解析字符串,并查看是否解析失败。这也是我链接的问题中推荐的方法,也是您应该遵循的方法。为什么不使用
Double\parseDouble
并检查NumberFormatException
?“[0-9]+[.][0-9]+”
-您不需要锚定,您需要允许1个或多个带有+
量词的数字。对于基本正则表达式,可能需要重复的数字,这里特别是“量词”部分。为什么不使用Double#parseDouble
并检查NumberFormatException
?“[0-9]+[.][0-9]+”
-您不需要锚定,您需要允许1个或多个带有+
量词的数字。对于基本正则表达式,您可能需要重复,这里特别是“量词”部分。锚定是多余的,因为OP使用的是匹配()
@davidvorak:You所以我希望文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等这样的数字-不知道为什么这样对你有效。@WiktorStribiżew我认为他的修改表达式不起作用,所以我最好的猜测是他从Q&a链接获取了一个更完整的表达式。锚是多余的,因为OP使用了matches()
@davidvorak:You所以我想文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等这样的数字-不知道为什么这样对你有效。@WiktorStribiżew我不认为他修改过的表达式有效,所以我最好的猜测是他从问答链接中得到了一个更完整的表达式。我想保持问题的简单。我想要达到的目标是:用户将vlaue输入文本字段。这个值将被转换成一个double,因为我需要它来处理一些数学问题。所以我希望文本字段接受诸如:5 | 1.2 | 1.234 | 1234.13156 |等数字@davidvorak:这是否意味着您需要验证用空格分隔的数字?请将所有相关细节添加到问题本身。对于混淆,抱歉,|只是用来分隔的@dasblinkenlight回答解决了我的问题。不过,我也要感谢你帮助我。简化问题。用户输入一个数字。程序检查它是否与我定义的正则表达式匹配,然后将其分配给一个双变量。如果它与我的正则表达式不匹配(例如,它有a、inside或用户输入字符,则会显示一条警告。@davidvorak,如果您100%确定只显示“正常”数字,则该正则表达式可以。但双精度有多种形式(1e5、10000000.47、NaN…)我想让这个问题保持简单。我想要实现的是:用户将vlaue输入文本字段。然后这个值将被转换成一个双精度值,因为我需要它来处理一些数学问题。所以我想文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等数字。@davidvorak:这意味着你eed验证用空格分隔的数字|