文字列の分割は、文字列を操作したいときに必要となる作業です。
本記事では、Golangにおいて文字列を分割する方法はどのようなものがあるか見ていきます。
① Split() 関数で文字列を分割する
GolangのstringsパッケージにはSplit()という関数があり、これを使うと文字列を効率よく分割することができます。
split()関数の使い方は以下のとおりです。
package main
import (
"fmt"
"strings"
)
func main() {
s := "This,is,a,pen,"
splitedStrings := strings.Split(s, ",")
fmt.Println(splitedStrings) // [This is a pen]
}
文字列は分割され、配列になります。
SplitN関数を使った文字列の分割
GolangのstringsパッケージのSplitN関数は、メインの文字列、セパレータ、そして作成される文字列の数という3つの引数を取ります。
以下は、そのSplitN関数を使ったコード例です。
package main
import (
"fmt"
"strings"
)
func main() {
s := "This.is.a.pen"
result := strings.SplitN(s, ".", 4)
fmt.Println(result) // [This is a pen]
}
空白を利用した文字列の分割
GolangにはFieldsという関数があり、空白で区切った後のスライスを返してくれます。
以下はその動作例です。
package main
import (
"fmt"
"strings"
)
func main() {
s := "This is a pen"
result := strings.Fields(s)
fmt.Println(result) // [This is a pen]
}
区切り文字を除去しない文字列の分割
GolangのSplitAfter関数を使用すると、区切り文字を削除せずに文字列を分割することができます。
以下は、SplitAfter関数の使い方を示すコード例です。
package main
import (
"fmt"
"strings"
)
func main() {
s := "This,is,a,pen."
result := strings.SplitAfter(s, ",") // 区切り文字を削除しない
fmt.Println(result) // [This, is, a, pen.]
}
また、文字列から個々の文字のスライスを生成することも可能で、その方法は以下の通りです。
package main
import (
"fmt"
"strings"
)
func main() {
s := "Hello"
result := strings.SplitAfter(s, "") // 一つ一つの文字に分解する
fmt.Println(result) // [H e l l o]
}
正規表現による文字列の分割
正規表現を使えば、区切り文字のパターンを使って文字列を分割することができます。
以下は、正規表現を使用した文字列分割の例です。
package main
import (
"fmt"
"regexp"
)
func main() {
s := "abcabcabcabc"
target := regexp.MustCompile(`[b]`)
result := target.Split(s, -1) // 2番目の引数 -1 は、部分文字列の数に制限がないことを意味する
fmt.Println(result) // [a ca ca ca c]
}