Как сравнить случай двух строк в Clojure? - PullRequest
0 голосов
/ 10 сентября 2018

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

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

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

Итак, функция case-match, которая может работать как

(case-match "Abs" "absolute")  => "Absolute"

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

также вы можете перейти с 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
0 голосов
/ 10 сентября 2018

Вы можете использовать строку prefix в качестве префикса к регистронезависимому результату поиска. Просто используйте subs, чтобы удалить длину префикса из результата поиска:

(defn case-match [prefix s]
  (str prefix (subs s (count prefix))))

(case-match "Abs" "absolute")
=> "Absolute"

Предполагается, что ваша autocomplete функция остается отдельной, и case-match будет применяться к ее результату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...