Что такое idiomatic scala способ нахождения, если заданная строка содержит заданную подстроку? - программирование
Подтвердить что ты не робот

Что такое idiomatic scala способ нахождения, если заданная строка содержит заданную подстроку?

У меня две строки в scala, и я хочу узнать, если большая строка (needle) содержит меньшую строку (haystack).

Я нашел это с помощью регулярных выражений и совпадений (от этого вопроса):

needle.r.pattern.matcher(haystack).matches

который (1) грубо усложняется для такой простой задачи, но что более важно, (2) не работает для меня, потому что

"needle".r.pattern.matcher("Finding needle in haystack").matches

возвращает

Boolean = false

4b9b3361

Ответ 1

Если вы хотите сделать это с максимальной эффективностью, вам, возможно, придется написать его самостоятельно (или найти хороший алгоритм поиска подстроки где-нибудь). Если вы просто хотите, чтобы он вообще работал, то в Scala:

scala> "Finding needle in haystack" contains "needle"
res0: Boolean = true

scala> "Finding needle in haystack" indexOf "needle"
res1: Int = 8

Это не поиск регулярных выражений. Вы тоже не используете регулярное выражение (edit: потому что этот код запрашивает точное совпадение со всей строкой, а не для поиска соответствующей подстроки), но это другая проблема. Если вы хотите подсчитать количество совпадений, вы можете сделать что-то вроде

scala> "needle".r.findAllIn("Finding needle in haystack").length
res2: Int = 1

Ответ 2

Хотя я ответил, что думал, что также предлагаю этот стиль регулярного выражения

scala> "I have a needle in my haystack" matches ".*needle.*"
res10: Boolean = true