commit
72574f554a
|
@ -95,6 +95,12 @@
|
||||||
<version>1.4</version>
|
<version>1.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.ahocorasick</groupId>
|
||||||
|
<artifactId>ahocorasick</artifactId>
|
||||||
|
<version>0.4.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -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<Emit> 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<String> inputStringList = Arrays.asList(inputString.split(" "));
|
||||||
|
List<String> wordsList = Arrays.asList(words);
|
||||||
|
|
||||||
|
return wordsList.stream().allMatch(inputStringList::contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean containsWordsArray(String inputString, String[] words) {
|
||||||
|
List<String> inputStringList = Arrays.asList(inputString.split(" "));
|
||||||
|
List<String> wordsList = Arrays.asList(words);
|
||||||
|
|
||||||
|
return inputStringList.containsAll(wordsList);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue