检查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.String
的contains
方法:
(.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议的那样 ,做起来简单快捷得多。