Go言語の文字列置換を完全ガイド!Replace関数で簡単に操作する方法
生徒
「Go言語で文章の中の特定の言葉を別の言葉に置き換えることってできますか?」
先生
「はい、できますよ。Go言語ではstringsパッケージに含まれているReplace関数を使えば、簡単に文字列の置換が可能です。」
生徒
「具体的にはどうやって書くんですか?」
先生
「それでは、Replaceの基本的な使い方から一緒に見ていきましょう!」
1. Replace関数とは?
Replace関数は、文字列の中にある特定の部分を別の文字列に置き換えるための関数です。例えば、「りんご」を「みかん」に変える、といった操作ができます。
置換というのは「元の言葉を探して新しい言葉に取り替える」ことです。日常で例えるなら、文章中の「赤ペンで書かれた文字を青ペンに書き直す」といったイメージです。
2. Replace関数の基本的な書き方
strings.Replaceの書き方は以下のとおりです。
- 第1引数:元の文字列
- 第2引数:探す文字列
- 第3引数:置き換える文字列
- 第4引数:置換する回数(-1を指定するとすべて置換)
package main
import (
"fmt"
"strings"
)
func main() {
text := "私はりんごが好きです。りんごは美味しいです。"
replaced := strings.Replace(text, "りんご", "みかん", -1)
fmt.Println(replaced)
}
私はみかんが好きです。みかんは美味しいです。
このように、-1を指定するとすべての「りんご」が「みかん」に置き換わります。
3. 置換する回数を指定する
Replaceの第4引数で置換する回数を指定できます。1を指定すれば最初の1つだけ、2を指定すれば最初の2つだけ置き換えます。
package main
import (
"fmt"
"strings"
)
func main() {
text := "りんご、りんご、りんご"
replaced := strings.Replace(text, "りんご", "みかん", 1)
fmt.Println(replaced)
}
みかん、りんご、りんご
この例では、最初の「りんご」だけが「みかん」に変わっています。
4. ReplaceとReplaceAllの違い
Go1.12以降では、strings.ReplaceAllという便利な関数も追加されています。これはReplaceの第4引数に-1を指定したのと同じ動きをする関数で、「すべて置換する」という目的専用です。
package main
import (
"fmt"
"strings"
)
func main() {
text := "Goは楽しい。Goをもっと学びたい。"
replaced := strings.ReplaceAll(text, "Go", "Golang")
fmt.Println(replaced)
}
Golangは楽しい。Golangをもっと学びたい。
ReplaceAllを使うことで「すべて置換」の意図が明確になり、コードの読みやすさも向上します。
5. 実践的な活用例
5-1. 禁止ワードの置き換え
掲示板やチャットアプリでは、不適切な言葉を別の記号に置き換える処理が必要になる場合があります。
package main
import (
"fmt"
"strings"
)
func main() {
text := "この商品は最悪だ!"
replaced := strings.ReplaceAll(text, "最悪", "***")
fmt.Println(replaced)
}
この商品は***だ!
5-2. データのフォーマット変換
たとえば、カンマ区切りの文字列をタブ区切りに変換する場合にもReplaceAllは役立ちます。
package main
import (
"fmt"
"strings"
)
func main() {
csv := "A,B,C,D"
tsv := strings.ReplaceAll(csv, ",", "\t")
fmt.Println(tsv)
}
A B C D
6. 注意点とエラー回避
ReplaceやReplaceAllは、元の文字列を直接変更するわけではなく、新しい文字列を返します。つまり、元の文字列はそのまま残ります。この点を理解しておかないと、「置換したのに変わっていない」という勘違いをすることがあります。
また、置換する対象の文字列が見つからなければ、そのまま返されます。エラーにはならないので安心ですが、「置き換わらないのはなぜ?」と混乱しないように確認しましょう。