如果一个给定的string包含一个给定的子string,寻找什么是惯用的scala方式?

我有两个string在斯卡拉,我想找出,如果较大的string( needle )包含一个较小的string( haystack )。

我发现是用这样的正则expression式和匹配( 从这个问题 ):

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

(1)对这样一个简单的问题严重过度,但更重要的是(2)对我不起作用,因为

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

回报

Boolean = false

如果你想以最大的效率来做,你可能需要自己写(或者find一个好的子stringsearchalgorithm)。 如果你只是想要它工作,那么在斯卡拉:

 scala> "Finding needle in haystack" contains "needle" res0: Boolean = true scala> "Finding needle in haystack" indexOf "needle" res1: Int = 8 

这些不是正则expression式search。 你也没有正确地使用正则expression式匹配(编辑:因为代码要求与整个string完全匹配,而不是find匹配的子string),但这是一个不同的问题。 如果你想要一个匹配数量的计数,你可以做类似的事情

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

虽然回答,我还以为我也会提供这种正则expression式的风格

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