diff --git a/java-strings/pom.xml b/java-strings/pom.xml
index f4fb1c0865..9f89ed6d76 100755
--- a/java-strings/pom.xml
+++ b/java-strings/pom.xml
@@ -95,6 +95,12 @@
1.4
+
+ org.ahocorasick
+ ahocorasick
+ 0.4.0
+
+
diff --git a/java-strings/src/main/java/com/baeldung/string/MatchWords.java b/java-strings/src/main/java/com/baeldung/string/MatchWords.java
new file mode 100644
index 0000000000..0cad52c320
--- /dev/null
+++ b/java-strings/src/main/java/com/baeldung/string/MatchWords.java
@@ -0,0 +1,83 @@
+package com.baeldung.string;
+
+import org.ahocorasick.trie.Emit;
+import org.ahocorasick.trie.Token;
+import org.ahocorasick.trie.Trie;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class MatchWords {
+
+ public static boolean containsWordsIndexOf(String inputString, String[] words) {
+ boolean found = true;
+ for (String word : words) {
+ if (inputString.indexOf(word) == -1) {
+ found = false;
+ break;
+ }
+ }
+ return found;
+ }
+
+ public static boolean containsWords(String inputString, String[] items) {
+ boolean found = true;
+ for (String item : items) {
+ if (!inputString.contains(item)) {
+ found = false;
+ break;
+ }
+ }
+ return found;
+ }
+
+ public static boolean containsWordsAhoCorasick(String inputString, String[] words) {
+ Trie trie = Trie.builder()
+ .onlyWholeWords()
+ .addKeywords(words)
+ .build();
+
+ Collection emits = trie.parseText(inputString);
+ emits.forEach(System.out::println);
+
+ boolean found = true;
+ for(String word : words) {
+ boolean contains = Arrays.toString(emits.toArray()).contains(word);
+ if (!contains) {
+ found = false;
+ break;
+ }
+ }
+
+ return found;
+ }
+
+ public static boolean containsWordsPatternMatch(String inputString, String[] words) {
+
+ StringBuilder regexp = new StringBuilder();
+ for (String word : words) {
+ regexp.append("(?=.*").append(word).append(")");
+ }
+
+ Pattern pattern = Pattern.compile(regexp.toString());
+
+ return pattern.matcher(inputString).find();
+ }
+
+ public static boolean containsWordsJava8(String inputString, String[] words) {
+ List inputStringList = Arrays.asList(inputString.split(" "));
+ List wordsList = Arrays.asList(words);
+
+ return wordsList.stream().allMatch(inputStringList::contains);
+ }
+
+ public static boolean containsWordsArray(String inputString, String[] words) {
+ List inputStringList = Arrays.asList(inputString.split(" "));
+ List wordsList = Arrays.asList(words);
+
+ return inputStringList.containsAll(wordsList);
+ }
+}
diff --git a/java-strings/src/test/java/com/baeldung/string/MatchWordsUnitTest.java b/java-strings/src/test/java/com/baeldung/string/MatchWordsUnitTest.java
new file mode 100644
index 0000000000..1c2288068b
--- /dev/null
+++ b/java-strings/src/test/java/com/baeldung/string/MatchWordsUnitTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.string;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class MatchWordsUnitTest {
+
+ private final String[] words = {"hello", "Baeldung"};
+ private final String inputString = "hello there, Baeldung";
+ private final String wholeInput = "helloBaeldung";
+
+ @Test
+ public void givenText_whenCallingStringContains_shouldMatchWords() {
+ final boolean result = MatchWords.containsWords(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingJava8_shouldMatchWords() {
+ final boolean result = MatchWords.containsWordsJava8(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingJava8_shouldNotMatchWords() {
+ final boolean result = MatchWords.containsWordsJava8(wholeInput, words);
+ assertThat(result).isEqualTo(false);
+ }
+
+ @Test
+ public void givenText_whenCallingPattern_shouldMatchWords() {
+ final boolean result = MatchWords.containsWordsPatternMatch(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingAhoCorasick_shouldMatchWords() {
+ final boolean result = MatchWords.containsWordsAhoCorasick(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingAhoCorasick_shouldNotMatchWords() {
+ final boolean result = MatchWords.containsWordsAhoCorasick(wholeInput, words);
+ assertThat(result).isEqualTo(false);
+ }
+
+ @Test
+ public void givenText_whenCallingIndexOf_shouldMatchWords() {
+ final boolean result = MatchWords.containsWordsIndexOf(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingArrayList_shouldMatchWords() {
+ final boolean result = MatchWords.containsWordsArray(inputString, words);
+ assertThat(result).isEqualTo(true);
+ }
+
+ @Test
+ public void givenText_whenCallingArrayList_shouldNotMatchWords() {
+ final boolean result = MatchWords.containsWordsArray(wholeInput, words);
+ assertThat(result).isEqualTo(false);
+ }
+}