说我有一个这样的段落:
String str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s";
setA
将包含Lorem,text,dummy等词
setB
将包含像Ipsum,印刷,工业等词
setC
将包含Lorem,text,dummy,Ipsum,printing,industry等字样。
之后
if(str.equals(set A))
{
Some logic
}
else if{
Set B logic
}
else{
Set C logic
}
我如何在java中编码?
答案 0 :(得分:1)
尝试以下内容:
public boolean hasAny( final String txt, final Collection<String> words )
{
for ( final String word : words )
if ( txt.contains( word ) )
return true;
return false;
}
public boolean hasAll( final String txt, final Collection<String> words )
{
boolean result = true;
for ( final String word : words )
result &= txt.contains( word );
return result;
}
也可以用Java8流完成类似的工作......
答案 1 :(得分:0)
您是否期望每个集合的整数返回告诉您幻影的数量,或者是一个布尔值,告诉您每个集合中是否有多个幻像?
我会计算字符串中每个单词的幻影数量并返回最低值,或者当每个幻影的数量>> 2时返回一个布尔值,具体取决于你想要做什么。
我们首先要有一个类型
的结构var groups = datatable.AsEnumerable().GroupBy(item => item.Date.Date);
伪代码:
Map<Integer,String> setA = new HashMap<Integer,String>();// Integer is the number of apparitions of the String in the set
如果这是您想要的,请告诉我,然后我会为您提供代码。
答案 2 :(得分:0)
也许这是一个奇怪的解决方案,但它可以在很长的段落中帮助你,所以通常我会使用String::matches
和一些正则表达式:
//Only one word
(?i)(?=.*\bword\b).*
//-----------^
//Multiple words
(?i)(?=.*\bword1\b).*(?=.*\bword2\b).*
//---------^-----------------^
所以这个想法很简单,为你的单词创建一个模式,然后使用匹配来验证段落是否包含所有单词:
代码示例:
class Main {
public static void main(String as[]) {
String str = "Lorem Ipsum is simply dummy text of the printing and "
+ "typesetting industry. Lorem Ipsum has been the industry's "
+ "standard dummy text ever since the 1500s";
String setA = "Lorem, text, dummy";
String setB = "Ipsum, printing, industry";
String setC = "Lorem, text, dummy,Ipsum, printing, industry";
Main m = new Main();
if (str.matches(m.getPattern(setA))) {
//Do something
} else if (str.matches(m.getPattern(setB))) {
//Do something
} else if (str.matches(m.getPattern(setC))) {
//Do something
}
}
//The important method
private String getPattern(String words) {
StringBuilder pattern = new StringBuilder();
System.out.println(Arrays.toString(words.split(",\\s*")));
Arrays.asList(words.split(",\\s*"))
.stream()
.map(t -> "(?=.*\\b" + t + "\\b).*")
.forEach(pattern::append);
return "(?i)" + pattern.toString();
}
}
方法getPattern
将采用单词setA
,setB
,setC
...的列表,它可以是任何内容,然后在:
[Lorem, text, dummy]
(我认为输入是一个字符串,我使用拆分,如果你有一个集合,你可以避免使用拆分并使用此像这样的集合)例如:对于setA
,它会返回一个类似(?i)(?=.*\bLorem\b).*(?=.*\btext\b).*(?=.*\bdummy\b).*
的模式,它可以匹配包含所有单词 Lorem
和{的任何paragraphe {1}}和虚拟