Je dois vérifier si une chaîne Java contient une sous-chaîne dans mes tests.
Cela ne fonctionne pas car Java ne sont pas des collections:
(deftest test_8
(testing "get page from sputnik"
(let [
band "Isis"
page (get-sputnikpage-for-artist band)
]
(is (contains? band "Isis")))));does NOT work
Existe-t-il un moyen de convertir des chaînes Java en collections? Ou puis-je vérifier les occurrences de sous-chaîne par d'autres moyens?
Le moyen le plus simple consiste à utiliser la méthode contains
à partir de Java.lang.String
:
(.contains "The Band Named Isis" "Isis")
=> vrai
Vous pouvez également le faire avec des expressions régulières, par exemple.
(re-find #"Isis" "The Band Named Isis")
=> "Isis"
(re-find #"Osiris" "The Band Named Isis")
=> néant
Si vous avez besoin que votre résultat soit vrai ou faux, vous pouvez l'encapsuler dans boolean
:
(boolean (re-find #"Osiris" "The Band Named Isis"))
=> faux
Clojure 1.8 a introduit la fonction inclut? .
(use '[clojure.string :as s])
(s/includes? "abc" "ab") ; true
(s/includes? "abc" "cd") ; false
Les chaînes sont séparables:
(seq "Hello") ;;=> (\H \e \l \l \o)
... afin que vous puissiez utiliser la bibliothèque de séquences pour trouver une correspondance:
(defn subsumes [main sub]
(some
(partial = (seq sub))
(partition (count sub) 1 main)))
(subsumes "Hello" "ll") ;;=>> true
... mais c'est plus simple et beaucoup plus rapide à faire comme l'a suggéré Diego Basch .