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

Luk*_*uke 41 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
Run Code Online (Sandbox Code Playgroud)

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

Die*_*sch 72

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

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

=>是的

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

(re-find #"Isis" "The Band Named Isis")
Run Code Online (Sandbox Code Playgroud)

>"Isis"

(re-find #"Osiris" "The Band Named Isis")
Run Code Online (Sandbox Code Playgroud)

=>无

如果您需要结果为true或false,可以将其包装在boolean:

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

=>假


San*_*Lee 45

Clojure 1.8已经推出了包括?功能.

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


Thu*_*ail 5

字符串是可选的:

(seq "Hello") ;;=> (\H \e \l \l \o)
Run Code Online (Sandbox Code Playgroud)

...所以你可以使用序列库来找到匹配:

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

(subsumes "Hello" "ll") ;;=>> true
Run Code Online (Sandbox Code Playgroud)

......但是像Diego Basch建议的那样,它更简单,更快捷.