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

时间:2018-09-10 06:55:15

标签: string clojure case-sensitive

我有一个Clojure函数autocomplete,它带有一个前缀并返回该字符串的可能的autocompletion。例如,如果输入为abs,则我得到absolute作为可能的完整单词。

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

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

因此,可以像这样工作的函数case-match

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

2 个答案:

答案 0 :(得分:3)

您可以使用前缀字符串作为不区分大小写的搜索结果的前缀。只需使用subs从搜索结果中删除前缀的长度即可:

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

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

这假设您的autocomplete函数保持独立,并且case-match将应用于其结果。

答案 1 :(得分:0)

另外,您可以选择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