【问题标题】:How to check if a string is all upper or lower case in Go?如何在Go中检查字符串是全部大写还是小写?
【发布时间】:2020-04-05 04:36:25
【问题描述】:

在 Golang 中检查字符串中的所有字符是大写还是小写的简单方法是什么?

另外,字符串有标点的情况如何处理?

查看这些示例:

package main

import (
    "fmt"
    "unicode"
)

func main() {
    s := "UPPERCASE"
    fmt.Println(s.IsUpper())  // Should print true

    s = "lowercase"
    fmt.Println(s.IsUpper())  // Should print false

    s = "lowercase"
    fmt.Println(s.IsLower())  // Should print true

    s = "I'M YELLING AT YOU!"
    fmt.Println(s.IsUpper())  // Should print true
}

注意:s.IsUpper() 和 s.IsLower() 并不真正存在,但如果能找到一个等价物就好了。

【问题讨论】:

  • 使用strings.ToUpper/Lower并将输出与输入进行比较。

标签: string go uppercase lowercase


【解决方案1】:

一种解决方案是使用 strings.ToUpper()/ToLower() 并与原始字符串进行比较。这也适用于标点符号。

解决办法如下:

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "UPPERCASE"
    fmt.Println(strings.ToUpper(s) == s)

    s = "lowercase"
    fmt.Println(strings.ToUpper(s) == s)

    s = "lowercase"
    fmt.Println(strings.ToLower(s) == s)

    s = "I'M YELLING AT YOU!"
    fmt.Println(strings.ToUpper(s) == s)
}

【讨论】:

  • 查看我对@JimB 解决方案的评论。它比这个解决方案更有效。
【解决方案2】:

您当然可以完整地比较大写和小写字符串,或者您可以在第一次失败时将比较短路,这在比较长字符串时会更有效。

func IsUpper(s string) bool {
    for _, r := range s {
        if !unicode.IsUpper(r) && unicode.IsLetter(r) {
            return false
        }
    }
    return true
}

func IsLower(s string) bool {
    for _, r := range s {
        if !unicode.IsLower(r) && unicode.IsLetter(r) {
            return false
        }
    }
    return true
}

【讨论】:

  • 所以我想我会说显而易见的。我认为您的观点是,使用 strings.ToUpper 是一个 O(n) 操作,并且对于非常长的字符串来说成本很高(随着 n 变大)。所以你的解决方案使用 unicode.IsUpper 并且一旦你找到一个不是大写的字符就会短路。好答案!
猜你喜欢
  • 2020-10-21
  • 2012-01-03
  • 2018-06-17
  • 1970-01-01
  • 2015-04-23
  • 2011-09-15
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多