String.contains
String.contains
работает со строкой, точка. Это не работает с регулярным выражением. Он проверит, отображается ли указанная строка в текущей строке или нет.
Обратите внимание, что String.contains
не проверяется граница слова; он просто проверяет наличие подстроки.
Решение Regex
Regex более эффективен, чем String.contains
, поскольку вы можете установить границу слов для ключевых слов (среди прочего). Это означает, что вы можете искать ключевые слова как слова , а не просто подстроки .
Используйте String.matches
со следующим регулярным выражением:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Регулярное выражение RAW (удалите экранирование, сделанное в строковом литерале - это то, что вы получите, распечатав строку выше):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
В \b
проверяет границы слова, так что вы не получите спичку restores store products
. Обратите внимание, что stores 3store_product
это также отклоняется, поскольку цифры и _
считаются частью слова, но я сомневаюсь, что этот регистр появляется в естественном тексте.
Поскольку граница слова проверяется с обеих сторон, регулярное выражение выше будет искать точные слова. Другими словами, stores stores product
не будет соответствовать регулярному выражению выше, так как вы ищете слово store
без s
.
.
обычно соответствует любому символу, кроме нескольких символов новой строки . (?s)
в начале .
соответствует любому символу без исключения (спасибо Тиму Пицкеру за указание на это).
(?s)
в начало вашего регулярного выражения, если строка содержит символы новой строки.\\b
\
чтобы указать сингл\
, поэтому\\b
он будет интерпретироваться как\b
, как видно в регулярном выражении RAW.\b
соответствует границе слова, как описано выше.matcher.find()
делает то, что вам нужно. Пример:источник
Вы можете просто использовать
matches
метод класса String.источник
.*
иначе будут найдены только строки, начинающиеся сstores
.Если вы хотите проверить, содержит ли строка подстроку или не использует регулярное выражение, самое близкое, что вы можете сделать, - это использовать find () -
Обратите внимание на разницу между функциями match () и find (), match () возвращает true, если вся строка соответствует заданному шаблону. find () пытается найти подстроку, соответствующую шаблону в заданной входной строке. Также, используя find (), вам не нужно добавлять дополнительное сопоставление, например - (? S). * В начале и. * В конце вашего шаблона регулярного выражения.
источник
1. результат: верно
2. результат: верно
источник
fromIndex
игнорируется, не так ли?contains("something", test, 5) => true