Clojure字符串搜索和计数

时间:2013-11-19 12:04:44

标签: regex clojure

我想知道什么是Clojure-esque和标准化的搜索字符串并返回布尔值(或者某些falsy / truthy)的方式。 (例如在Java中我会使用.indexOf()并将其强制转换为布尔值。)

我想要做的是搜索地图中的所有字符串并返回1或0,具体取决于单词“clouds”是否在字符串中,然后在最后找出累积值 - 我明白我可以使用正则表达式执行此操作,但是我想知道是否有替代方法?

1 个答案:

答案 0 :(得分:3)

实际上在Java中,最自然的解决方案是使用contains方法。你可以在Clojure中做同样的事情:

(.contains "foobar" "bar")
;= true

通过seqable进行映射:

(mapv #(.contains "foobar" ^String %) ["foo" "bar"])
;= [true true]

使用地图作为输入,您必须决定是否需要键,值或两者;根据答案,您需要使用keysvals或只是映射条目(在这种情况下reduce-kv会产生比map更高效的解决方案

这假设您正在搜索文字子字符串(与indexOf一样)。使用正则表达式时,我会使用re-find并转换为boolean(如果没有匹配则返回nil)。