Ответ 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