67

我在 scala 中有两个字符串,我想知道较大的字符串 ( 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 回答