[英]Check if a string starts with a decimal digit?
看起來以下作品,這是一個好方法嗎?
var thestr = "192.168.0.1"
if (thestr[0]>= '0' && thestr[0] <= '9'){
//...
}
您的解決方案是完全可以的。
但是請注意,Go中的字符串以只讀字節片的形式存儲,其中字節是UTF-8編碼的字節序列,對字符串進行索引將對其字節進行索引,而不對其符文(字符)進行索引。 但是由於十進制數字( '0'..'9'
)恰好有一個字節,因此在這種情況下可以測試第一個byte
,但是首先您應該測試len(s) > 0
或s != ""
。
這是其他一些選擇,請在Go Playground上全部嘗試:
這是您的解決方案,可能是最快的解決方案:
s := "12asdf"
fmt.Println(s[0] >= '0' && s[0] <= '9')
fmt.Sscanf()
: 注意:這也接受string
是否以負數開頭,確定對您來說是否有問題(例如,接受"-12asf"
)。
i := 0
n, err := fmt.Sscanf(s, "%d", &i)
fmt.Println(n > 0, err == nil) // Both n and err can be used to test
unicode.IsDigit()
: fmt.Println(unicode.IsDigit(rune(s[0])))
regexp
: 我可能永遠不會使用它,因為這是迄今為止最慢的,但是這里是:
r := regexp.MustCompile(`^\d`)
fmt.Println(r.FindString(s) != "")
要么:
r := regexp.MustCompile(`^\d.*`)
fmt.Println(r.MatchString(s))
請不要將regexps用於該簡單任務:)
在這種情況下,我將更改以下內容:
.5e-45
是一個數字,但可能不是您想要的。 0的語義也不簡單: https : //math.stackexchange.com/questions/238737/why-do-some-people-state-that-zero-is-not-a-number 由於您是按字符進行比較,並且沒有字符在1到9之間,因此我認為您的解決方案是可以的,但它不能解決后面的其他數字。
例如,如果thestr
為"192.something.invalid"
則它不再是IP。
我建議使用正則表達式來檢查IP。
就像是
\b(?:\d{1,3}\.){3}\d{1,3}\b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.