如何在Go中将字符串切换为特定字符?

Lak*_*hor 6 string substring go slice

我想提取一个字符串,直到找到一个字符.例如:

message := "Rob: Hello everyone!"
user := strings.Trim(message,
Run Code Online (Sandbox Code Playgroud)

我希望能够存储"Rob"(读取直到':'找到).

icz*_*cza 10

您可以使用strings.IndexByte()strings.IndexRune()获取冒号的位置(字节索引)':',然后简单地对值进行切片string:

message := "Rob: Hello everyone!"
user := message[:strings.IndexByte(message, ':')]
fmt.Println(user)
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

Rob
Run Code Online (Sandbox Code Playgroud)

如果您不确定冒号是否存在string,则必须先检查索引,然后才能进行切片string,否则会出现运行时混乱.这是你如何做到的:

message := "Rob: Hello everyone!"
if idx := strings.IndexByte(message, ':'); idx >= 0 {
    user := message[:idx]
    fmt.Println(user)
} else {
    fmt.Println("Invalid string")
}
Run Code Online (Sandbox Code Playgroud)

输出是一样的.

将邮件更改为无效:

message := "Rob Hello everyone!"
Run Code Online (Sandbox Code Playgroud)

这次输出是(在Go Playground上试试):

Invalid string
Run Code Online (Sandbox Code Playgroud)

另一个方便的解决方案是使用strings.Split():

message := "Rob: Hello everyone!"

parts := strings.Split(message, ":")
fmt.Printf("%q\n", parts)

if len(parts) > 1 {
    fmt.Println("User:", parts[0])
}
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

["Rob" " Hello everyone!"]
User: Rob
Run Code Online (Sandbox Code Playgroud)

如果有在输入没有结肠string,strings.Split()返回包含单个串的切片string值作为输入(上面的代码不会在这种情况下打印出任何东西作为长度将是1).


Kae*_*dys 6

strings.Indexstrings.IndexRune,具体取决于您是否要使用 unicode 作为分隔符,将为您提供所查找字符的索引。

或者,您可以使用 strings.Split 并只获取返回的第一个字符串。

例子:user := strings.Split(message, ":")[0]

https://play.golang.org/p/I1P1Liz1F6

值得注意的是,如果分隔符不在原始字符串中,这不会出现恐慌,但user变量将被设置为整个原始字符串。