我有一个像"something...ceil(0.9)...something"
这样的字符串。
我使用模式p = Pattern.compile(".*ceil(.*[0-9]*\\.+[0-9]+)+.*");
来检测双精度是否被ceil()
包围。但它不起作用。有人帮忙吗?
答案 0 :(得分:0)
这是一个基本的开头:
ceil\\([0-9]+\\.[0-9]*\\)
您可以更明确地在括号中定义数字,但您需要转义括号。
尝试使用此网站进行正则表达式测试:http://regexpal.com/
答案 1 :(得分:0)
".*ceil\\(\\d+(.\\d+)?\\).*"
匹配1
,738294
,ect(无小数点)或2.3
4432.12634
(数字点数)等数字。
如果您想接受.5
之类的数字,请将第一个+
更改为*
。
答案 2 :(得分:-2)
我没有得到; Math#ceil(double)
方法将double
作为参数,但无论如何,您应该尝试简单地将传递给ceil
方法的参数解析为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
。