我有一个像"something...ceil(0.9)...something"
.
我正在使用 Patternp = Pattern.compile(".*ceil(.*[0-9]*\\.+[0-9]+)+.*");
来检测双精度是否被ceil()
. 但它不起作用。有人帮忙吗?
这是一个基本的开始:
ceil\\([0-9]+\\.[0-9]*\\)
您可以更明确地定义括号中的数字,但您确实需要转义括号。
尝试使用此站点进行正则表达式测试:http ://regexpal.com/
".*ceil\\(\\d+(.\\d+)?\\).*"
匹配数字,如1
, 738294
, ect(无小数点)或2.3
4432.12634
(数字点号)。
如果您想接受类似的数字.5
,请将第一个更改+
为 a *
。
我不明白;该Math#ceil(double)
方法将 adouble
作为参数,但无论如何,而不是正则表达式,也许您应该尝试简单地将传入ceil
方法的参数解析为 a double
; 如果它抛出异常,则意味着它不是有效的double
:
private boolean validArgument(final String string){
final int start = string.indexOf("ceil(");
if(start < 0)
return false;
final int end = string.indexOf(')');
if(end < start || end < 0)
return false;
try{
Double.parseDouble(string.substring(start, end));
return true;
}catch(Exception ex){
return false;
}
}
对于使用,它就像:
final boolean valid = validArgument("Math.ceil(45.97)");
这应该return
true
。