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

Kar*_*lek 61 regex scala

我在scala中有两个字符串,我想知道,如果较大的string(needle)包含一个较小的字符串(haystack).

我发现用regexps和匹配这样做(来自这个问题):

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

对于这样一个简单的问题,这是(1)非常复杂,但更重要的是,(2)对我不起作用,因为

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

回报

Boolean = false

Rex*_*err 103

如果你想以最高效率做到这一点,你可能必须自己编写(或者在某处找到一个好的子串搜索算法).如果你只想让它工作,那么在Scala中:

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

scala> "Finding needle in haystack" indexOf "needle"
res1: Int = 8
Run Code Online (Sandbox Code Playgroud)

这些不是正则表达式搜索.你没有正确使用正则表达式匹配(编辑:因为该代码要求与整个字符串完全匹配,而不是找到匹配的子字符串),但这是一个不同的问题.如果你想要一个匹配数的计数,你可以做类似的事情

scala> "needle".r.findAllIn("Finding needle in haystack").length
res2: Int = 1
Run Code Online (Sandbox Code Playgroud)

  • 如果有人想知道,`contains`和`indexOf`只是`java.lang.String`上的方法,并且这里没有Scala魔法.我没有看过源代码,但我希望它们是经过优化的方法. (7认同)

Nei*_*ers 18

虽然回答我认为我也会提供这种正则表达式的风格

scala> "I have a needle in my haystack" matches ".*needle.*"
res10: Boolean = true
Run Code Online (Sandbox Code Playgroud)

  • @EdStaub它不是问题的主题,但如果正则表达式是必要的,这个答案仍然是相关的.indexOf和contains似乎不适用于正则表达式. (4认同)