如何在Clojure中按字母顺序比较两个字符串?

时间:2019-11-16 22:15:38

标签: string clojure compare alphabetical

如果我有一个字符串为String a =“ Apple”,而另一个字符串为String“ b” =“ Banana”,我将如何比较两者并得到类似(b> a)的值, Clojure?

2 个答案:

答案 0 :(得分:4)

内置的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编译器可能会警告您这样做。如果您不介意警告,请继续尝试,但最好警告其他人共同开发或使用您正在执行的代码,以免引起误解。

您可以在自己的名称空间中定义自己的名为< >等的函数,以使其表现为您想要的行为。

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