0

我有一个像"something...ceil(0.9)...something".

我正在使用 Patternp = Pattern.compile(".*ceil(.*[0-9]*\\.+[0-9]+)+.*");来检测双精度是否被ceil(). 但它不起作用。有人帮忙吗?

4

3 回答 3

0

这是一个基本的开始:

ceil\\([0-9]+\\.[0-9]*\\)

您可以更明确地定义括号中的数字,但您确实需要转义括号。

尝试使用此站点进行正则表达式测试:http ://regexpal.com/

于 2013-09-05T00:53:44.137 回答
0
".*ceil\\(\\d+(.\\d+)?\\).*"

匹配数字,如1, 738294, ect(无小数点)或2.3 4432.12634(数字点号)。

如果您想接受类似的数字.5,请将第一个更改+为 a *

于 2013-09-05T00:58:53.397 回答
-2

我不明白;该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

于 2013-09-05T01:00:18.480 回答