【问题标题】:How do I check whether a string is UpperCase or not in clojure?如何在clojure中检查字符串是否为大写?
【发布时间】:2017-01-31 23:03:16
【问题描述】:

我想检查一个字符串是否为大写。有一个检查字符的函数,但没有检查字符串的函数。

【问题讨论】:

    标签: string clojure uppercase


    【解决方案1】:

    假设您要检查 String 中的每个字符都是大写的,您可以像这样使用every?

    user=> (every? #(Character/isUpperCase %) "Hello")
    false
    user=> (every? #(Character/isUpperCase %) "HELLO")
    true
    

    【讨论】:

    • 虽然这在逻辑上是正确的,但这种方法在性能方面对我来说似乎不合理。我运行的一个标准基准测试表明它比我建议的实现慢 50 倍,而且我认为使用像 every? 这样的高级实用程序来完成这样的低级任务不会有太多好处。
    • @ValentinWaeselynck 该方法是可行的。如果添加类型提示,性能将会提高:(every? (fn [^Character x] (Character/isUpperCase x)) "HELLO")。现在它应该与您的变体相当
    • 我的立场是正确的,这种方法比我想象的要快(虽然仍然是迄今为止提出的最慢的方法)。根据我的实验,它仍然落后于 StringUtils(这里:gist.github.com/vvvvalvalval/0b6be04c0191cce6fa09bba8f821b967)。就个人而言,我仍然赞成使用clojure.string/upper-case 的方法。
    • 感谢@ntlabs 的回答。对于后面的人,请注意,当给定带有空格的字符串时,此解决方案将返回 false(例如 (every? #(Character/isUpperCase %) "Hello, World!") => false)
    【解决方案2】:

    对于此类问题,首先要寻找 Java 答案:)

    Is there an existing library method that checks if a String is all upper case or lower case in Java?

    在这种情况下,我的建议是使用Apache Commons Lang's StringUtils/isAllUpperCase

    (import org.apache.commons.lang3.StringUtils)
    
    (StringUtils/isAllUpperCase "HeLLO")
    

    如果您想要一个可跨所有平台(Clojure、ClojureScript 等)移植的解决方案,最好的策略可能是将大写字符串与原始字符串进行比较:

    (require '[clojure.string :as str])
    
    (defn all-uppercase? [s]
      (= s (str/upper-case s)))
    

    【讨论】:

      【解决方案3】:

      Clojure(Script) 的 cuerdas 库有一个函数 upper(和 locale-upper),可用于检查大写。

      https://funcool.github.io/cuerdas/latest/#upper

      #(= % (cuerdas/upper %))
      

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 2017-12-24
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 2014-08-13
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多