String.contains
String.containsfunziona con String, punto. Non funziona con regex. Controllerà se la stringa esatta specificata appare o meno nella stringa corrente.
Notare che String.containsnon controlla il confine di parola; controlla semplicemente la sottostringa.
Soluzione Regex
Regex è più potente di String.contains, poiché puoi applicare il confine di parola alle parole chiave (tra le altre cose). Ciò significa che puoi cercare le parole chiave come parole , anziché solo sottostringhe .
Utilizzare String.matchescon la seguente regex:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
La regex RAW (rimuovi l'escape fatto in stringa letterale: questo è ciò che ottieni quando stampi la stringa sopra):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
I \bcontrolli per confine di parola, in modo che non si ottiene una corrispondenza per restores store products. Nota che stores 3store_productè anche rifiutato, poiché digit e _sono considerati parte di una parola, ma dubito che questo caso appaia nel testo naturale.
Poiché il confine della parola è controllato per entrambi i lati, la regex sopra cercherà le parole esatte. In altre parole, stores stores productnon corrisponderà alla regex sopra, poiché stai cercando la parola storesenza s.
.normalmente corrisponde a qualsiasi carattere tranne un numero di caratteri di nuova riga . (?s)all'inizio fa .corrispondenze qualsiasi personaggio senza eccezioni (grazie a Tim Pietzcker per averlo fatto notare).
(?s)all'inizio della tua regex nel caso in cui la stringa contenga nuove righe.