我正在寻找更好的方法来检查Clojure中两个字符串是否相等!
给出地图“报告”,例如
{:Result Pass}
,当我评估
(type (:Result report))
我得到:Java.Lang.String
要为:Result
的值编写检查,我首先尝试了
(if (= (:Result report) "Pass") (println "Pass"))
但是检查失败。
所以我使用了有效的compare方法:
(if (= 0 (compare (:Result report) "Pass")) (println "Pass"))
但是,我想知道Clojure中是否有与Java的.equals()
方法等效的方法。或者是执行此操作的更好方法。
答案 0 :(得分:2)
=
是对字符串进行相等性检查的正确方法。如果它给您带来意想不到的结果,则您可能在String中有空格,就像结尾的换行符一样。
您可以使用vec
轻松检查空格:
(vec " Pass\n")
user=> [\space \P \a \s \s \newline]
答案 1 :(得分:1)
如@Carcigenicate所写,请使用=
比较字符串。
(= "hello" "hello")
;; => true
如果您不想那么严格,请在比较之前考虑对字符串进行规范化。如果我们有前导空格,则字符串不相等。
(= " hello" "hello")
;; => false
然后我们可以定义一个对我们有用的规范化函数。 在这种情况下,请忽略开头和结尾的空格, 大写。
(require '[clojure.string :as string])
(defn normalize [s]
(string/trim
(string/lower-case s)))
(= (normalize " hellO")
(normalize "Hello\t"))
;; => true
希望有帮助!