web-dev-qa-db-ja.com

Goで文字列がすべて大文字か小文字かを確認する方法は?

文字列内のすべての文字が大文字か小文字かを確認する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()は実際には存在しませんが、同等のものを見つけるといいでしょう。

4
jersey bean

もちろん、大文字と小文字の文字列全体を比較することも、最初の失敗時に比較を短絡することもできます。これは、長い文字列を比較する場合により効率的です。

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
}
7
JimB

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)
}
3
jersey bean