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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?