也许是奇怪的解决方案,但它可以帮助你在很长的段落,所以平时我用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
的列表...,它可以是任何东西,然后在:
- (1)拆分这句话例如用于组A它将给你
[Lorem, text, dummy]
(我认为输入是一个字符串,因为我使用拆分,如果你有一个集合,你可以避免使用拆分和使用这个集合,就像它是)
- (2)循环抛出单词列表来创建一个模式,以便稍后可以使用它来匹配您的输入(我使用Stream of Java 8而不是普通循环来简化模式的创建)。
因此,对于例如:setA
它会返回一个模式像这样(?i)(?=.*\bLorem\b).*(?=.*\btext\b).*(?=.*\bdummy\b).*
,它可以匹配包含所有单词Lorem
和text
和虚拟
检查regex demo
你有没有任何paragraphe已经尝试了一些? –
雅我尝试使用StringUtils。但是我刚开始学习java,这对我来说有点困难。 – normalactivity