如何从字符串中获取分隔符前后的切片?在 Python 中,我可以简单地编写
user, _, domain = "foo@example.com".partition("@")
assert user == "foo"
assert domain == "example.com"
值得注意的是,如果输入中存在多个分隔符,或者根本没有分隔符,这也有效。如何在 Go 中轻松拆分字符串?
如何从字符串中获取分隔符前后的切片?在 Python 中,我可以简单地编写
user, _, domain = "foo@example.com".partition("@")
assert user == "foo"
assert domain == "example.com"
值得注意的是,如果输入中存在多个分隔符,或者根本没有分隔符,这也有效。如何在 Go 中轻松拆分字符串?
您可以使用这个包装的辅助函数SplitN
:
import "strings"
func Partition(s string, sep string) (string, string, string) {
parts := strings.SplitN(s, sep, 2)
if len(parts) == 1 {
return parts[0], "", ""
}
return parts[0], sep, parts[1]
}
事实上,SplitN 允许您解析最多的n
字符串。如果您需要更简单的电子邮件检查,您可以尝试以下代码。不要忘记检查错误。
package main
import (
"fmt"
"strings"
"errors"
)
func Separate(str, separator string) (string, string, error){
sepIndex := strings.Index(str, separator)
if sepIndex >= 0 {
return str[0 : (sepIndex)], str[sepIndex+len(separator) : len(str)], nil
} else {
return "", "", errors.New("Separator now found!")
}
}
func main(){
str := "@xmyname@xample.com"
fmt.Println("Initial string: ", str)
p1, p2, err := Separate(str, "@x")
if err != nil{
fmt.Println(err)
} else {
fmt.Println("Slice 1:", p1, "\nSlice 2:",p2)
}
}