我想提取一個字符串,直到找到一個字符。例如:如何在Go中切分字符串直到特定字符?
message := "Rob: Hello everyone!"
user := strings.Trim(message,
我希望能夠存儲"Rob"
(讀,直到':'
被發現)。
我想提取一個字符串,直到找到一個字符。例如:如何在Go中切分字符串直到特定字符?
message := "Rob: Hello everyone!"
user := strings.Trim(message,
我希望能夠存儲"Rob"
(讀,直到':'
被發現)。
您可以使用strings.IndexByte()
或strings.IndexRune()
獲得結腸':'
的位置(字節指數),那麼只需slice的string
值:
message := "Rob: Hello everyone!"
user := message[:strings.IndexByte(message, ':')]
fmt.Println(user)
輸出(嘗試在Go Playground):
Rob
如果您不確定冒號是否在string
中,則必須在繼續對string
進行切片之前檢查索引,否則你會遇到運行時恐慌。這是你如何做到的:
message := "Rob: Hello everyone!"
if idx := strings.IndexByte(message, ':'); idx >= 0 {
user := message[:idx]
fmt.Println(user)
} else {
fmt.Println("Invalid string")
}
輸出是一樣的。
更改消息是無效的:
message := "Rob Hello everyone!"
輸出這個時間(試它的Go Playground):
Invalid string
另一個方便的解決方案是使用strings.Split()
:
message := "Rob: Hello everyone!"
parts := strings.Split(message, ":")
fmt.Printf("%q\n", parts)
if len(parts) > 1 {
fmt.Println("User:", parts[0])
}
輸出(在Go Playground上試用):
["Rob" " Hello everyone!"]
User: Rob
如果有在輸入string
,strings.Split()
返回包含單個string
值作爲輸入的字符串的切片沒有冒號(上面的代碼不會在這種情況下打印出任何東西作爲長度將1
)。
strings.Index或strings.IndexRune,這取決於您是否要使用unicode作爲分隔符,會爲您提供所需字符的索引。
或者,您可以使用strings.Split並只抓住返回的第一個字符串。
實施例:user := strings.Split(message, ":")[0]
https://play.golang.org/p/I1P1Liz1F6
值得注意的是,這不會驚慌,如果分隔符不在原始字符串,但user
變量將被設置到原來的字符串的全部代替。