Solución:
String.contains
String.contains
funciona 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.contains
no comprueba el límite de las 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 subcadenas.
Usar String.matches
con 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).*bstoresb.*bstoreb.*bproductb.*
los b
comprueba el límite de palabras, de modo que no obtenga una coincidencia para restores store products
. Tenga en cuenta que stores 3store_product
tambié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 product
no coincidirá con la expresión regular anterior, ya que está buscando la palabra store
sin s
.
.
normalmente coincide con cualquier personaje excepto varios caracteres de nueva línea. (?s)
al principio hace .
coincide con cualquier carácter sin excepción (gracias a Tim Pietzcker por señalar esto).
matcher.find()
hace lo que necesita. Ejemplo:
Pattern.compile("stores.*store.*product").matcher(someString).find();
Simplemente puede usar matches
método de la clase String.
boolean result = someString.matches("stores.*store.*product.*");