Quel est le moyen simple dans Golang de vérifier si tous les caractères d'une chaîne sont en majuscules ou en minuscules?
Aussi, comment gérer un cas où la chaîne a une ponctuation?
Voir ces exemples:
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
}
Remarque: s.IsUpper () et s.IsLower () n'existent pas vraiment, mais ce serait bien de trouver un équivalent.
Vous pouvez bien sûr comparer les chaînes majuscules et minuscules dans leur intégralité, ou vous pouvez court-circuiter les comparaisons au premier échec, ce qui serait plus efficace lors de la comparaison de chaînes longues.
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
}
Une solution consiste à utiliser strings.ToUpper ()/ToLower () et à comparer avec la chaîne d'origine. Cela fonctionne également pour le cas de ponctuation.
Voici la solution:
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)
}