String.contains
String.containsfunciona con String, punto. No funciona con expresiones regulares. Verificará si la Cadena exacta especificada aparece en la Cadena actual o no.
Tenga en cuenta que String.containsno comprueba el límite de palabras; simplemente busca una subcadena.
Solución Regex
Regex es más poderoso que String.contains, ya que puede hacer cumplir el límite de palabras en las palabras clave (entre otras cosas). Esto significa que puede buscar las palabras clave como palabras , en lugar de solo como subcadenas .
Úselo String.matchescon la siguiente expresión regular:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
La expresión regular RAW (elimine el escape realizado en el literal de cadena; esto es lo que obtiene cuando imprime la cadena de arriba):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Los \bcheques de límite de palabra, por lo que no se obtiene una coincidencia para restores store products. Tenga en cuenta que stores 3store_producttambién se rechaza, ya que dígito y_ se consideran parte de una palabra, pero dudo que este caso aparezca en texto natural.
Dado que el límite de palabras está marcado para ambos lados, la expresión regular de arriba buscará palabras exactas. En otras palabras, stores stores productno coincidirá con la expresión regular anterior, ya que está buscando la palabra storesin s.
.normalmente coincide con cualquier carácter excepto con un número de caracteres de nueva línea . (?s)al principio hace .coincidir con cualquier personaje sin excepción (gracias a Tim Pietzcker por señalar esto).
(?s)al inicio de su expresión regular en caso de que la cadena contenga nuevas líneas.