面试题答案
一键面试package main
import (
"fmt"
"strings"
)
func splitComplexString(s string) []string {
// 定义所有分隔符
delimiters := []string{",", ";", " "}
// 首先使用Join将所有分隔符合并为一个
combinedDelimiter := strings.Join(delimiters, "")
// 使用FieldsFunc按合并后的分隔符分割字符串
return strings.FieldsFunc(s, func(c rune) bool {
return strings.ContainsRune(combinedDelimiter, c)
})
}
设计思路
- 合并分隔符:将所有需要的分隔符合并成一个字符串,这样便于后续使用
strings.FieldsFunc
进行操作。 - 使用
strings.FieldsFunc
:该函数接收一个字符串和一个判断函数,判断函数用来决定哪些字符是分隔符。这里通过strings.ContainsRune
来判断字符是否在合并后的分隔符字符串中,以此来分割原字符串。
优化点
- 减少内存开销:没有使用多个中间变量存储分割后的子字符串,直接通过
strings.FieldsFunc
一次完成分割,减少了不必要的内存分配。 - 提高性能:
strings.FieldsFunc
是Go语言标准库中专门用于按自定义规则分割字符串的函数,其内部实现经过优化,性能较高。而且通过一次合并分隔符并进行分割,避免了多次循环和分割操作,从而提高了整体性能。
func main() {
s := "a, b; c ,d;e"
result := splitComplexString(s)
fmt.Println(result)
}
在main
函数中可以测试该分割函数。