我想检查输入字符串是drools规则中的double。输入是一个字符串,我想在输入字符串是一个数字(双精度)时触发规则。如何在规则的各个部分写下这个条件?
rule "rule1"
when
(answer!=null && //mycode to check answer is double)
then
//do something
end
答案 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的问题,我会把它打开。
但请注意,正则表达式不会真正告诉您它是否是有效的双精度,因为您无法使用正则表达式检查限制。