簡體   English   中英

如何檢查 Go 中的字符串是大寫還是小寫?

[英]How to check if a string is all upper or lower case in 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() 並不存在,但如果能找到一個等價物會很好。

您當然可以完整地比較大寫和小寫字符串,或者您可以在第一次失敗時將比較短路,這在比較長字符串時會更有效。

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()/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)
}

A unicode.{IsUpper, Lower}和 B字符串。{ToUpper, Lower}都不錯

  • 對於單字節組成的數據,A會比B好
  • 如果數據字節不確定,則 B 優於 A:例如中文a1
package main

import (
    "strings"
    "testing"
    "unicode"
)

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

func IsUpper(s string) bool {
    return strings.ToUpper(s) == s
}

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

func IsLower(s string) bool {
    return strings.ToLower(s) == s
}

func TestIsUpper(t *testing.T) {
    for _, d := range []struct {
        actual   bool
        expected bool
    }{
        {IsUpperU("中文A1"), false}, // be careful!
        {IsUpper("中文A1"), true},

        {IsUpper("中文a1"), false},
        {IsUpperU("中文a1"), false},
    } {
        if d.actual != d.expected {
            t.Fatal()
        }
    }
}

func TestIsLower(t *testing.T) {
    for idx, d := range []struct {
        actual   bool
        expected bool
    }{
        {IsLowerU("中文a1"), false}, // be careful!
        {IsLower("中文a1"), true},

        {IsLower("中文A1"), false},
        {IsLowerU("中文A1"), false},
    } {
        if d.actual != d.expected {
            t.Fatal(idx)
        }
    }
}

去游樂場

不需要 unicode:

func IsUpper(s string) bool {
    for _, charNumber := range s {
        if charNumber > 90 || charNumber < 65 {
            return false
        }
    }
    return true
}
    
func IsLower(s string) bool {
    for _, charNumber := range s {
        if charNumber > 122 || charNumber < 97 {
            return false
        }
    }
    return true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM