如果我有一个字符串为String a =“ Apple”,而另一个字符串为String“ b” =“ Banana”,那么我如何比较这两个字符串,并得到类似(b> a)的结果,在Clojure中?
内置Clojure函数compare
是用于多种值(包括字符串)的三向比较器,但是它通过UTF-16 Unicode代码点比较字符,对于ASCII子集,它将比较大写字母与小写字母不同,因此可能不是您要查找的内容。
如果要在具有ASCII子集中所有字符的字符串之间进行不区分大小写的比较,则可以使用如下所示:
(require '[clojure.string :as str])
(compare (str/lower-case s1) (str/lower-case s2))
如果您想针对不同的语言/区域设置进行更高级的与区域设置有关的字符串比较,则可以使用Java库,您可以通过Java互操作调用该库,例如参见https://docs.oracle.com/javase/tutorial/i18n/text/locale.html或ICU4J库:http://site.icu-project.org/home/why-use-icu4j
我不知道有什么推荐的方法可以替换clojure.core/<
和clojure.core/>
的定义,以使它们的行为不同于对字符串的行为。您可以在自己的代码中使用defn
它们并覆盖clojure.core
中的定义,但是您可能会从Clojure编译器收到有关这样做的警告。如果您不注意警告,请继续尝试,但最好警告其他人共同开发或使用您正在执行的代码,以避免造成误解。
当然,您可以在自己的名称空间中定义自己的名为<
>
等的函数,以使其表现为您想要的行为。
您可以find string comparison functions here,以及许多其他帮助和便利功能。
(increasing? a b)
Returns true if a pair of strings are in increasing lexicographic order.
(increasing-or-equal? a b)
Returns true if a pair of strings are in increasing lexicographic order, or equal.