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

问题描述 投票:1回答:2

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

string clojure compare alphabetical
2个回答
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
投票

您可以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.
© www.soinside.com 2019 - 2024. All rights reserved.