67

私はscalaに2つの文字列を持っていますが、大きい文字列(needle)に小さい文字列()が含まれているかどうかを調べたいと思いますhaystack

私が見つけたのは、このような正規表現と一致でそれを行っていることです(この質問から):

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

これは、(1)このような単純な問題では非常に複雑ですが、さらに重要なことに、(2)私にはうまくいきません。

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

戻り値

Boolean = false

4

2 に答える 2

113

最大の効率でそれを行いたい場合は、自分で作成する必要がある場合があります (または、適切な部分文字列検索アルゴリズムをどこかで見つけてください)。まったく機能させたい場合は、Scala で次のようにします。

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

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

これらは正規表現検索ではありません。正規表現の一致も正しく使用していません(編集:そのコードは、一致する部分文字列を見つけるのではなく、文字列全体との完全な一致を要求するためです)が、それは別の問題です。一致数をカウントしたい場合は、次のようにすることができます

scala> "needle".r.findAllIn("Finding needle in haystack").length
res2: Int = 1
于 2012-04-12T15:23:35.790 に答える
19

答えはありましたが、この正規表現スタイルも提供すると思いました

scala> "I have a needle in my haystack" matches ".*needle.*"
res10: Boolean = true
于 2012-04-12T16:07:12.763 に答える