如何在 Clojure 中比较两个字符串的大小写?

How to compare the case of two strings in Clojure?

我有一个 Clojure 函数 autocomplete,它接收一个前缀和 returns 该字符串的可能 autocompletion。例如,如果输入是 abs,我会得到 absolute 作为可能的完整单词。

问题是该函数对前缀进行不区分大小写的匹配,因此如果我将 Abs 作为前缀输入,我仍然会得到 absolute 而不是 Absolute

获得与输入的原始前缀大小写匹配的最终字符串完成的正确方法是什么?

所以,函数 case-match 可以像

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

您可以使用 prefix 字符串作为不区分大小写的搜索结果的前缀。只需使用 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