检查字符串列表中的任何字符串是否存在于段落(字符串)中?
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; ... }
注意规则中的contains
是java.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
我添加这个是为了强调必须准确地陈述问题才能得出有用的答案。也许我的建议都不是你要找的。
我的 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; ... }
注意规则中的contains
是java.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
我添加这个是为了强调必须准确地陈述问题才能得出有用的答案。也许我的建议都不是你要找的。