检查String是否包含clojure中的子字符串

时间:2014-10-15 15:49:13

标签: string clojure

我需要在我的测试中检查java String是否包含子字符串。

这不起作用,因为java字符串不是集合:

(deftest test_8
    (testing "get page from sputnik"
        (let [
            band "Isis"
            page (get-sputnikpage-for-artist band)
            ]
            (is (contains? band "Isis")))));does NOT work

有没有办法将java字符串转换为集合?或者我可以通过其他方式检查子串出现吗?

3 个答案:

答案 0 :(得分:71)

最简单的方法是使用contains中的java.lang.String方法:

(.contains "The Band Named Isis" "Isis")

=>真

您也可以使用正则表达式,例如

(re-find #"Isis" "The Band Named Isis")

=> "伊希斯"

(re-find #"Osiris" "The Band Named Isis")

=>零

如果您需要结果为真或假,可以将其包装在boolean

(boolean (re-find #"Osiris" "The Band Named Isis"))

=>假

答案 1 :(得分:43)

Clojure 1.8引入了includes?功能。

(use '[clojure.string :as s])
(s/includes? "abc" "ab") ; true
(s/includes? "abc" "cd") ; false

答案 2 :(得分:5)

字符串是可选的:

(seq "Hello") ;;=> (\H \e \l \l \o)

...所以可以使用序列库来查找匹配项:

(defn subsumes [main sub]
  (some
   (partial = (seq sub))
   (partition (count sub) 1 main)))

(subsumes "Hello" "ll") ;;=>> true

...但as Diego Basch suggested更简单,更快捷。