我在scala中有两个字符串,我想知道,如果较大的字符串(needle
)包含较小的字符串(haystack
)。
我发现使用regexps和匹配这样的代码(from this question):
needle.r.pattern.matcher(haystack).matches
这对于这样一个简单的问题是非常复杂的,但更重要的是,(2)对我不起作用,因为
"needle".r.pattern.matcher("Finding needle in haystack").matches
返回
Boolean = false
答案 0 :(得分:97)
如果你想以最高的效率做到这一点,你可能必须自己编写(或者在某处找到一个好的子串搜索算法)。如果您只想让它工作,那么在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
答案 1 :(得分:17)
虽然回答我认为我也会提供这种正则表达式
scala> "I have a needle in my haystack" matches ".*needle.*"
res10: Boolean = true