こんにちは。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 件のコメント:
コメントを投稿