こんにちは。scarvizです。
今回は文字列の置換の紹介です。
■文字列の置換
文字列を置換するには、stringsパッケージのReplace関数を使用します。
第一引数には置換対象の文字列、第二引数には置換前の文字列、
第三引数には置換後の文字列、第四引数は置換する数を指定します。
第四引数は、前方から数えていくつまで置換するかという指定をします。-1にするとすべてが対象になります。
package main import ( "fmt" "strings" ) func main() { str := "Test String Replace Replace" // 最初に出現する"Replace"のみを"rep"に変更する resStr1 := strings.Replace(str, "Replace", "rep", 1) fmt.Println(resStr1) // すべての"Replace"を"rep"に変更する resStr2 := strings.Replace(str, "Replace", "rep", -1) fmt.Println(resStr2) }
結果:
Test String rep Replace Test String rep rep
■Replacerで置換する
複数の決まった文字列を置換するにはReplacerを使うと便利です。
Replacerを生成するには、NewReplacer関数で置換前文字列、置換後文字列を順番に任意の数分指定します。
置換はReplacerのReplaceメソッドを使用します。
package main import ( "fmt" "strings" ) func main() { str := "Test String Replace Replace" // Replacerを使って置換する r := strings.NewReplacer("Test", "Tes", "String", "str", "Replace", "rep") resStr := r.Replace(str) fmt.Println(resStr) }
結果:
Tes str rep rep
■ReplacerのWriteStringメソッド
ReplacerはWriteStringメソッドでも置換することが出来ます。
package main import ( "bytes" "fmt" "strings" ) func main() { str := "Test String Replace Replace" r := strings.NewReplacer("Test", "Tes", "String", "str", "Replace", "rep") var buf bytes.Buffer // 戻り値は置換後の文字列の長さとエラー n, err := r.WriteString(&buf, str) if err != nil { fmt.Println(err) return } res := buf.String() fmt.Printf("res:%s\nn:%d\n", res, n) }
結果:
res:Tes str rep rep n:15
ただ、このWriteStringメソッドはどういう状況で使うものなのか、あまり想定できていません。
ご存知の方がいらっしゃいましたら、教えて頂けると嬉しいです。
0 件のコメント:
コメントを投稿