如果给定的字符串包含给定的子字符串,那么找到的惯用scala方法是什么?

时间:2012-04-12 15:14:23

标签: regex scala

我在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

2 个答案:

答案 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