如何正确检查一个字符串是否等于Clojure中的另一个字符串?

时间:2019-04-01 17:58:36

标签: clojure

我正在寻找更好的方法来检查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()方法等效的方法。或者是执行此操作的更好方法。

2 个答案:

答案 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

希望有帮助!