Убедитесь, что String содержит подстроку в clojure
Мне нужно проверить, содержит ли строка java подстроку в моих тестах.
Это не работает, потому что строки 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 в коллекции? Или я могу проверить наличие вставки подстроки другими способами?
Ответы
Ответ 1
Самый простой способ - использовать метод contains
из java.lang.String
:
(.contains "The Band Named Isis" "Isis")
= > true
Вы также можете делать это с помощью регулярных выражений, например
(re-find #"Isis" "The Band Named Isis")
= > "Isis"
(re-find #"Osiris" "The Band Named Isis")
= > nil
Если ваш результат будет истинным или ложным, его можно обернуть в boolean
:
(boolean (re-find #"Osiris" "The Band Named Isis"))
= > false
Ответ 2
Clojure 1.8 ввел includes? функцию.
(use '[clojure.string :as s])
(s/includes? "abc" "ab") ; true
(s/includes? "abc" "cd") ; false
Ответ 3
Строки доступны:
(seq "Hello") ;;=> (\H \e \l \l \o)
... поэтому вы можете использовать библиотеку последовательностей для поиска соответствия:
(defn subsumes [main sub]
(some
(partial = (seq sub))
(partition (count sub) 1 main)))
(subsumes "Hello" "ll") ;;=>> true
... но проще и гораздо быстрее сделать как предложил Диего Баш.