NO IMAGE

【Go】文字列の前方/後方一致と置換

NO IMAGE

Go言語の文字列には、stringsパッケージが主に使われます。今回はその中から、「最初、あるいは最後に特定の文字列があるか判定する」「特定の文字列を置換する」方法を紹介したいと思います。

前方/後方一致

ある文字列を最初(最後)に含むかの判定には、strings.HasPrefixあるいはstrings.HasSuffixが使えます。

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println(strings.HasPrefix("abcdefg", "abc")) // true
	fmt.Println(strings.HasPrefix("abcdefg", "Abc")) // false

  fmt.Println(strings.HasSuffix("vwxyz", "yz")) // true
  fmt.Println(strings.HasSuffix("vwxyz", "Yz")) // false
}

上のサンプルコードからもわかる通り、双方とも、大文字と小文字は厳密に判定されます。

文字列置換

文字列の置換には、strings.Replace関数を利用することができます。

package main

import (
	"fmt"
	"strings"
)

func main() {
  fmt.Println(strings.Replace("abcdefabc", "abc", "ABC", 1))  // ABCdefabc
  fmt.Println(strings.Replace("abcdefabc", "abc", "ABC", 2))  // ABCdefABC
  fmt.Println(strings.Replace("abcdefabc", "abc", "ABC", -1)) // ABCdefABC

}

第一引数に与えた文字列の内、第二引数の部分文字列を、第三引数に与えた文字列で置換する、という挙動になります。第四引数の数値は、「同じ部分文字列の内、最初から何番目までを置換するか」を表しています。ここが負の値なら、最後から・・ではなく、「とくに制限は設けないので、バンバン置換しちゃってください」という意味になります。

また、特に気にせず対象の部分文字列すべてを入れ替えたい時は、strings.ReplaceAll()も使えます。

package main

import (
	"fmt"
	"strings"
)

func main() {
  fmt.Println(strings.ReplaceAll("abcdefabc", "abc", "ABC"))  // ABCdefABC
}

参考リンク・書籍