Better Way To Detect If A String Contains Multiple Words
Answer :
I'd create a regular expression from the words:
Pattern pattern = Pattern.compile("(?=.*adsf)(?=.*qwer)"); if (pattern.matcher(input).find()) { execute(); }
For more details, see this answer: https://stackoverflow.com/a/470602/660143
Editors note: Despite being heavily upvoted and accepted, this does not function the same as the code in the question.
execute
is called on the first match, like a logical OR.
You could use an array:
String[] matches = new String[] {"adsf", "qwer"}; bool found = false; for (String s : matches) { if (input.contains(s)) { execute(); break; } }
This is efficient as the one posted by you but more maintainable. Looking for a more efficient solution sounds like a micro optimization that should be ignored until proven to be effectively a bottleneck of your code, in any case with a huge string set the solution could be a trie.
In Java 8 you could do
public static boolean containsWords(String input, String[] words) { return Arrays.stream(words).allMatch(input::contains); }
Sample usage:
String input = "hello, world!"; String[] words = {"hello", "world"}; if (containsWords(input, words)) System.out.println("Match");
Comments
Post a Comment