2013年4月14日日曜日

Go言語 文字列の置換


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

コメントを投稿