也許是奇怪的解決方案,但它可以幫助你在很長的段落,所以平時我用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