如何在Go中检查字符串是否全部为大写或小写?

时间:2019-12-11 20:24:28

标签: string go uppercase lowercase

在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()确实不存在,但是很高兴找到一个等效项。

2 个答案:

答案 0 :(得分:6)

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

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
}

答案 1 :(得分:2)

一种解决方案是使用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)
}
相关问题