我需要在我的测试中检查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字符串转换为集合?或者我可以通过其他方式检查子串出现吗?
答案 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更简单,更快捷。