Как сравнить регистр двух строк в clojure?

У меня есть функция Clojure autocomplete, которая принимает префикс и возвращает возможный autocompletion этой строки. Например, если вводится abs, я получаю absolute как возможное полное слово.

Проблема в том, что функция выполняет сопоставление префикса без учета регистра, поэтому, если у меня есть Abs в качестве ввода префикса, я все равно получаю absolute вместо Absolute.

Каким будет правильный способ получить окончательное завершение строки, соответствующее регистру введенного исходного префикса?

Итак, функция case-match, которая могла бы работать как

(case-match "Abs" "absolute")  => "Absolute"
1
0
414
2
Перейти к ответу Данный вопрос помечен как решенный

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

Другие вопросы по теме