文字列内のすべての文字が大文字か小文字かを確認する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()は実際には存在しませんが、同等のものを見つけるといいでしょう。
もちろん、大文字と小文字の文字列全体を比較することも、最初の失敗時に比較を短絡することもできます。これは、長い文字列を比較する場合により効率的です。
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つの解決策は、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)
}