检查字符串列表中的任何字符串是否存在于段落(字符串)中?

Checking whether any of the string from a list of strings is present in a paragraph(string)?

我的 bean 文件中有一个字符串列表和一个字符串值。

这是我的 bean 文件

public class DataBean {    
List<String> combinations;
    private String story;

    public String getStory() {
            return story;
        }
        public void setStory(String story) {
            this.story = story;
        }

    public List<String> getCombinations() {
            return combinations;
        }
        public void setCombinations(List<String> combinations) {
            this.combinations = combinations;
        }

         public void addString(String value) {  
            if (combinations == null) {  
                combinations = new ArrayList<String>();  
            }  
            combinations.add(value);  
       }  

我想检查故事是否包含列表组合中的任何字符串 如果是,则打印 true,如果否,则打印 false。

我想在我的 DRL 文件中创建此规则,但我无法理解其语法。我是 drools 的新手,请帮我解决这个问题。

我可以创建和执行简单的规则,但我无法理解这种性质的规则。

除非您严重错误地陈述了问题的性质,否则没有简单的方法可以编写规则告诉您 故事 是否由 组合。我建议你写一个

public static boolean isComposed(){
    // ...
}

在 class DataBean 中实现算法(见我的评论)并在 RHS 上使用它来检查 DataBean 类型的事实是否包含符合此条件的数据。

编辑 根据我的回答下面的评论(但不同意“whether the story consists of any of the列表中的字符串)您可以编写以下规则:

rule "check for word"
when
    Wordlist( $words: words )
    $word: String() from $words
    $story: Story( $text: text, $text.contains( $word ) )
then
    // String $story.text has $word as a substring
end

与 classes

class Wordlist { List<String> words; ... }
class Story { String text; ... }

注意规则中的containsjava.lang.String.contains,它只是简单的测试参数是否是String对象的子串。对于列表 words 中出现在 text.

中的每个单词,该规则将触发一次

此外,这会产生误导性的结果。例如,如果故事包含单词 "portmanteau" 并且列表由 "port"、"or"、"man" 和 "ant" 组成,您将得到四次不正确的射击。您可以使用 "cook" 前面的规则

rule "check for word"
when
    Wordlist( $words: words )
    $word: String() from $words
    $story: Story( $text: text, 
                   $text.matches( ".*+\b" + $word + "\b.*" ) )
then
    // String $story.text contains the $word
end

我添加这个是为了强调必须准确地陈述问题才能得出有用的答案。也许我的建议都不是你要找的。