Подтвердить что ты не робот

Убедитесь, что 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 в коллекции? Или я могу проверить наличие вставки подстроки другими способами?

4b9b3361

Ответ 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

... но проще и гораздо быстрее сделать как предложил Диего Баш.