スペースを使用して文字列を分割するシナリオがあります。文字列内の分割された部分文字列間のスペースの数は不確かです。スペースは 1 つまたは 2 つ以上あります。このシナリオでは、最も簡単な strings.Split 関数を使用します。ただそれはできないと考えてください。この記事では、いくつかの効果的な方法を紹介します。
string.Fields 関数の使用
strings.Fields 関数は文字列型のパラメータを受け取り、スペースと複数の連続するスペースを使用して文字列を分割し、ニーズを満たす文字列スライスを返します。使用例は次のとおりです。
package main
import (
"fmt"
"strings"
)
func main() {
str := "欢迎来到路多辛的博客 所思所想 很棒"
s := strings.Fields(str)
fmt.Println(s)
}
実行して効果を確認します。
$ go run main.go
[欢迎来到路多辛的博客 所思所想 很棒]
str 内の部分文字列は異なる数のスペースで区切られていますが、strings.Fields 関数で処理した後に文字列型のスライスが取得され、文字列が完全に分割されていることがわかります。
正規表現を使用する
まずサンプルコードを見てください。
package main
import (
"fmt"
"regexp"
)
func main() {
str := "欢迎来到路多辛的博客 所思所想 很棒"
reg := regexp.MustCompile(`\s+`)
result := reg.Split(str, -1)
fmt.Println(result)
}
実行して効果を確認します。
$ go run main.go
[欢迎来到路多辛的博客 所思所想 很棒]
前の例と同じデータを取得します。まず、regexp.MustCompile 関数を使用して、1 つ以上のスペースに一致する正規表現を作成します (\s+ は、少なくとも 1 つのスペース文字に一致することを意味します)。次に、reg.Split メソッドを使用して文字列を分割し、2 番目のパラメータ -1 はすべての部分文字列を返すことを意味します。