Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
strings.Split() / Join() / Replace()
Goの『strings』パッケージには文字列の分割・結合・置換を行う関数が揃っています。CSVの解析や文字列の整形など、テキスト処理の基本操作に使います。
構文
import "strings" // セパレータで文字列を分割します。 parts := strings.Split(s, sep) // n個に分割します(n=-1は無制限)。 parts := strings.SplitN(s, sep, n) // 分割したスライスを結合します。 joined := strings.Join(parts, sep) // 最初のn個の一致を置換します(n=-1で全置換)。 result := strings.Replace(s, old, new, n) // すべて置換します(strings.Replace(s, old, new, -1)と同じ)。 result := strings.ReplaceAll(s, old, new)
関数一覧
| 関数 | 概要 |
|---|---|
| strings.Split(s, sep) | sをsepで分割した文字列スライスを返します。 |
| strings.SplitN(s, sep, n) | 最大n個に分割します。n=-1は無制限です。 |
| strings.SplitAfter(s, sep) | sepを含めた形で分割します。 |
| strings.Fields(s) | 連続するホワイトスペースで分割します。空白文字列は無視されます。 |
| strings.Join(elems, sep) | 文字列スライスをsepで結合した文字列を返します。 |
| strings.Replace(s, old, new, n) | sのoldをnewに最大n回置換します。n=-1ですべて置換します。 |
| strings.ReplaceAll(s, old, new) | sのoldをnewにすべて置換します。 |
| strings.Map(f, s) | 各ルーンに関数fを適用して変換します。 |
サンプルコード
package main
import (
"fmt"
"strings"
)
func main() {
// Split:文字列を分割します。
csv := "Alice,Bob,Charlie,Dave"
names := strings.Split(csv, ",")
fmt.Println("Split:", names)
fmt.Printf("要素数: %d\n", len(names))
// SplitN:最大N個に分割します。
parts := strings.SplitN(csv, ",", 2) // 最大2分割
fmt.Println("SplitN(2):", parts) // ["Alice" "Bob,Charlie,Dave"]
fmt.Println()
// Fields:ホワイトスペースで分割します。
text := " Go 言語 プログラミング "
words := strings.Fields(text) // 前後・連続するスペースを無視します。
fmt.Println("Fields:", words)
fmt.Printf("単語数: %d\n", len(words))
fmt.Println()
// Join:スライスを結合します。
langs := []string{"Go", "Python", "Rust"}
joined := strings.Join(langs, " / ")
fmt.Println("Join:", joined)
fmt.Println()
// Replace:部分文字列を置換します。
s := "apple apple apple"
fmt.Println("Replace(1):", strings.Replace(s, "apple", "orange", 1))
fmt.Println("Replace(-1):", strings.Replace(s, "apple", "orange", -1))
fmt.Println("ReplaceAll:", strings.ReplaceAll(s, "apple", "banana"))
fmt.Println()
// 実践例:CSVの簡単なパース
csvLine := "1,山田太郎,東京,30"
fields := strings.Split(csvLine, ",")
fmt.Printf("ID=%s 名前=%s 都市=%s 年齢=%s\n", fields[0], fields[1], fields[2], fields[3])
// パスの処理(strings.Builderで効率的に連結)
pathParts := []string{"home", "user", "documents", "file.txt"}
path := "/" + strings.Join(pathParts, "/")
fmt.Println("パス:", path)
}
概要
『strings.Split()』は区切り文字で文字列を分割し、『strings.Join()』はその逆操作です。この組み合わせはテキスト処理の基本パターンです。複数の置換を効率的に行いたい場合は『strings.NewReplacer()』を使うとより高速です。
strings.Split(s, "")とすると文字列をバイト単位で分割します。日本語などのUTF-8マルチバイト文字を1文字ずつ分割したい場合はfor range ループでルーンを取得するか、[]rune(s)に変換してください。
文字列の検索は『strings.Contains()』、大文字小文字変換は『strings.ToUpper() / ToLower() / TrimSpace()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。