检查string是否包含clojure中的子string

我需要检查一个Javastring是否包含我的testing中的一个子string。

这不起作用,因为Javastring不是集合:

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

有没有办法将Javastring转换为集合? 或者我可以检查其他方式的子string出现吗?

最简单的方法是使用java.lang.Stringcontains方法:

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

=> true

你也可以用正则expression式来做,例如

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

>>“Isis”

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

=>零

如果你需要你的结果是true或false,你可以用boolean来包装它:

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

=> false

Clojure 1.8推出了包括? function。

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

string是seqable:

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

…所以你可以使用序列库来find一个匹配:

 (defn subsumes [main sub] (some (partial = (seq sub)) (partition (count sub) 1 main))) (subsumes "Hello" "ll") ;;=>> true 

…但是像迭戈·巴斯(Diego Basch)所build议的那样 ,做起来简单快捷得多。