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



如果我有一个字符串是string a="Apple",另一个是string"b"="Banana",我如何能够比较这两个字符串,并在Clojure中得到类似(b>a(的值为true?

内置的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编译器收到有关这样做的警告。如果你不介意这些警告,那就去做吧,但你最好警告其他共同开发或使用你的代码的人,你正在这样做,以避免误解。

当然,您可以在自己的名称空间中定义自己的函数<>等,以实现自己喜欢的行为。

您可以在这里找到字符串比较函数,以及许多其他helper&便利功能。

(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.

相关内容

  • 没有找到相关文章

最新更新