我正在尝试检查小数点前最多有 13 位数字的双精度数,小数点和后面的数字是可选的。所以用户可以写一个整数或带小数的数字。
首先,我有这个:
if (check.matches("[0-9](.[0-9]*)?"))
我已经浏览了 Google 上的几个页面,尽管付出了各种努力,但仍然没有任何运气让它工作。我的想法是这样做,但它不起作用:
[0-9]{1,13}(.[0-9]*)?
我该怎么做?
不要忘记转义点。
if (check.matches("[0-9]{1,13}(\\.[0-9]*)?"))
首先你需要转义点(在java中这将是[0-9]{1,13}(\\.[0-9]*)?
)。其次,不要忘记双打还有另一种流行的表现形式——科学。所以这1.5e+4
又是一个有效的双数。最后不要忘记双数可能是负数,或者可能根本没有整数部分。例如-1.3
和.56
是有效的双打。
约翰的回答很接近。但是如果您接受负值,则需要添加一个“-”,以防它是负数。所以,它会被修改为-?[0-9]{1,13}(\.[0-9]*)?
如果您需要使用逗号和负数验证小数:
Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);
祝你好运。
你可以使用 \d+(\.\d*)? 如下科特林语言 -
val rawString = "Hi.. 2345.97 ..Bye"
val DOUBLE_PATTERN = Pattern.compile("\\d+(\\.\\d*)?")
val matcher = DOUBLE_PATTERN.matcher(rawString)
var filterNumber = 0.0
if (matcher.find())
filterNumber = matcher.group() // extracted number- 2345.97