String.contains
String.contains
fonctionne avec String, point final. Il ne fonctionne pas avec les expressions rationnelles. Elle vérifiera si la chaîne exacte spécifiée apparaît dans la chaîne actuelle ou non.
Notez que String.contains
ne vérifie pas la limite du mot ; il vérifie simplement la sous-chaîne.
Solution Regex
Regex est plus puissant que String.contains
puisque vous pouvez imposer une limite de mots aux mots clés (entre autres choses). Cela signifie que vous pouvez rechercher les mots-clés comme mots plutôt que de simplement sous-chaînes .
Utilisez String.matches
avec la regex suivante :
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
La regex RAW (supprimez l'échappement effectué dans la chaîne littérale - c'est ce que vous obtenez lorsque vous imprimez la chaîne ci-dessus) :
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Le site \b
vérifie les limites des mots, de sorte que vous n'obtenez pas de correspondance pour restores store products
. Notez que stores 3store_product
est également rejetée, puisque digit et _
sont considérés comme faisant partie d'un mot, mais je doute que ce cas apparaisse dans un texte naturel.
Comme la limite des mots est vérifiée des deux côtés, la regex ci-dessus recherchera des mots exacts. En d'autres termes, stores stores product
ne correspondra pas à la regex ci-dessus, puisque vous recherchez le mot store
sans s
.
.
correspondent normalement à tout caractère sauf un nombre de nouveaux caractères de ligne . (?s)
au début fait .
correspond à n'importe quel caractère sans exception (merci à Tim Pietzcker de l'avoir signalé).