Drools - 如何检查输入字符串是一个数字

时间:2013-12-14 12:08:14

标签: java jboss drools

我想检查输入字符串是drools规则中的double。输入是一个字符串,我想在输入字符串是一个数字(双精度)时触发规则。如何在规则的各个部分写下这个条件?

rule "rule1"
when 
    (answer!=null && //mycode to check answer is double)
then
    //do something
end

1 个答案:

答案 0 :(得分:2)

答案非常简短:你不能,也不应该。为了详细说明这一点,Drools没有可以应用于String的运算符来生成true或false。但是,Java提供了一种简单的方法:java.lang.Double.valueOf( String s ),但您不能在约束中使用它,因为只要String不是有效数字,它就会抛出异常。

因此,简短的回答是:写一个函数并调用它:

function boolean isValid( String s ){
   try {
       Double.valueOf( s );
       return true;
   } catch( Exception e ){
       return false;
   }
}

rule "check"
when
    SomethingMissing( isValid( answer ) )
then ... end

您也不必检查答案是否为null,因为该函数也处理此问题。

但碰巧这个代码在Drools中触发了一个错误,一个在5.4.0中,另一个在5.5.0中。它适用于5.3.0。

您可以尝试其他方法并使用Drools的模式匹配运算符:

rule "check"
when
    SomethingMissing( answer != null and answer matches "???" )
then ... end

你所要做的就是为???提供正则表达式代表你想要接受的所有东西。由于这不是Drools的问题,我会把它打开。

但请注意,正则表达式不会真正告诉您它是否是有效的双精度,因为您无法使用正则表达式检查限制。