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は、元の文字列を直接変更するわけではなく、新しい文字列を返します。つまり、元の文字列はそのまま残ります。この点を理解しておかないと、「置換したのに変わっていない」という勘違いをすることがあります。
また、置換する対象の文字列が見つからなければ、そのまま返されます。エラーにはならないので安心ですが、「置き換わらないのはなぜ?」と混乱しないように確認しましょう。
まとめ
今回の記事では、Go言語で文字列を柔軟に操作するための重要な機能である
strings.Replace と strings.ReplaceAll の活用方法について詳しく学びました。
文字列置換はプログラミングにおいて頻繁に利用される処理であり、テキスト編集、ログ整形、データ変換、禁止ワード対策など、さまざまな場面で欠かせない仕組みです。
特に、Go言語では文字列が不変(immutable)であるため、置換処理は常に「新しい文字列を返す」という動きを理解しておくことが大切です。
こうした基本動作を押さえたうえで活用することで、思わぬバグや期待しない挙動を避けることができます。
また、ReplaceとReplaceAllは似ているようで用途が異なり、
・置換回数を細かく指定したいなら Replace
・対象をすべて置き換えたいなら ReplaceAll を使うといった使い分けが重要になります。
特に大きなテキストや複数の文字列操作が連続する処理では、こうした関数選択がパフォーマンスや理解しやすさに影響するため、適切な選択が求められます。
実践的な例でも触れたように、禁止ワード置換やデータ整形のような日常的な処理でも
ReplaceAll が非常に役立ちます。テキストを加工する必要が出てきたときに、
「まず置換が使えるかどうか」を考えるだけで、コードの複雑さを減らし、可読性の高い実装ができるようになります。
とくに、Webアプリケーションやデータ処理系のプログラムでは、入力値を整形したり、
検索・表示用のテキストを加工したりする場面が多いため、文字列置換の理解は大きな助けとなります。
まとめ用サンプル:文章中の複数種類の語句をまとめて置換する
ここでは、複数の異なる単語をまとめて置換する簡単な例を紹介します。 ひとつの文章の中で関連する語句を一括で調整したいときに便利です。
package main
import (
"fmt"
"strings"
)
func main() {
text := "今日はりんごとバナナを買いました。りんごは甘いです。"
text = strings.ReplaceAll(text, "りんご", "みかん")
text = strings.ReplaceAll(text, "バナナ", "ぶどう")
fmt.Println(text)
}
今日はみかんとぶどうを買いました。みかんは甘いです。
このように、複数の置換処理を連続して適用することで、文章全体の意味を自然に保ちながら内容を変えることができます。 実務では、ログデータ中の特定の識別子をマスクしたり、ユーザー入力を安全な文字に変換したりする場面でよく利用されます。
置換処理を行う際に意識したいポイント
正確な置換を行うには、対象となる文字列が正確に一致する必要があります。
全角と半角の違いや、似たような表現が混じっている場合は思うように置換されず、
「なぜ変わらないのか?」と混乱することも少なくありません。
必要に応じてTrim、Contains、ToLowerといった補助的な関数を併用することで、精度の高い文字列処理が可能になります。
例えば、ユーザーからの入力を標準化し、置換対象となる語句と一致しやすくするために、 小文字へ統一したうえで置換するケースがあります。下記はその一例です。
text := strings.ToLower("Goが好きです。GOの勉強を続けたいです。")
result := strings.ReplaceAll(text, "go", "golang")
fmt.Println(result)
golangが好きです。golangの勉強を続けたいです。
このように、入力を整形してから置換処理を行うことで、期待どおりの結果を得やすくなります。 文字列操作は小さな工夫を積み重ねるだけで、プログラム全体の品質や使い勝手が大きく向上します。
まとめとして覚えておきたい点
・Replaceは回数指定、ReplaceAllは全文置換
・置換は新しい文字列を返すため変数の再代入が必須
・複数の置換は順番にも注意すること
・入力の揺れ(大文字小文字、全角半角)を整えると精度が上がる
・実践の場面ではテキスト整形、禁止語処理、ログ処理などで必須となる
生徒
「ReplaceとReplaceAllを使い分けるだけで、文章の処理がすごく楽になるんですね!」
先生
「その通りです。とくに大量のテキストを扱うときや、ユーザー入力を整形するときには欠かせないテクニックですよ。」
生徒
「複数の語句をまとめて置換したり、入力を小文字に揃えてから置換したりする工夫が大事なんですね。」
先生
「ええ。こうした処理が自然にできるようになると、文章処理の幅が一気に広がります。 実務でも本当によく使うので、今日学んだ 基本をしっかり覚えておくと良いですよ。」
生徒
「はい!これから文字列処理を書くときは積極的に置換を使ってみます!」
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!