Как сравнить случай двух строк в Clojure?
У меня есть функция Clojure autocomplete
который берет префикс и возвращает возможный autocompletion
этой строки. Например, если вход abs
, Я получил absolute
как возможное полное слово.
Проблема в том, что функция выполняет регистронезависимое совпадение для префикса, поэтому, если у меня есть Abs
в качестве ввода префикса, я все еще получаю absolute
вместо Absolute
,
Каков будет правильный способ получить окончательное завершение строки, которое соответствует регистру исходного введенного префикса?
Итак, функция case-match
это может работать как
(case-match "Abs" "absolute") => "Absolute"
2 ответа
Вы можете использовать строку префикса в качестве префикса к результату поиска без учета регистра. Просто используйте subs
чтобы удалить длину префикса из результата поиска:
(defn case-match [prefix s]
(str prefix (subs s (count prefix))))
(case-match "Abs" "absolute")
=> "Absolute"
Это предполагает ваш autocomplete
функция остается отдельной, и case-match
будет применяться к его результату.
Кроме того, вы можете пойти с startsWith
(defn case-match
[prefix s]
(when (.startsWith (clojure.string/lower-case s)
(clojure.string/lower-case prefix))
s))
(case-match "Abs" "absolute")
#=> "absolute"
(case-match "Absence" "absolute")
#=> nil