如果我有一个字符串为String a =“ Apple”,而另一个字符串为String“ b” =“ Banana”,我将如何比较两者并得到类似(b> a)的值, Clojure?
答案 0 :(得分:4)
内置的Clojure函数compare
是用于多种值(包括字符串)的三向比较器,但是它通过UTF-16 Unicode代码点比较字符,对于ASCII子集,该字符将比较高位大小写字母与小写字母不同,所以可能不是您要查找的。 p>
如果要在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编译器可能会警告您这样做。如果您不介意警告,请继续尝试,但最好警告其他人共同开发或使用您正在执行的代码,以免引起误解。
您可以在自己的名称空间中定义自己的名为<
>
等的函数,以使其表现为您想要的行为。
答案 1 :(得分:1)
您可以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.