Goの文字列操作を勉強したのでそのまとめ。
目次
- 目次
- 大文字小文字変換
- タイトルケースに変換
- 文字列を比較
- 文字列の中に特定の文字列が存在するか
- 指定した文字数をカウント
- 空白文字でsplit
- 先頭/終端文字列の一致確認
- 文字列のインデックスを取得
- slice内の文字列を連結
- 文字列置換
- 文字列を分割
- 文字列の削除
strings
パッケージに文字列操作のためな便利な関数があるのでまずはこれをimportする。
import ( "strings" )
大文字小文字変換
// 大文字小文字変換 fmt.Println(strings.ToUpper("toupper")) // TOUPPER fmt.Println(strings.ToLower("TOLOWER")) // tolower
タイトルケースに変換
fmt.Println(strings.Title("hey")) // "Hey" fmt.Println(strings.Title("heyhey")) // "Heyhey" fmt.Println(strings.Title("hey hey")) // "Hey Hey"
文字列を比較
fmt.Println(strings.Compare("a", "a")) // 0 fmt.Println(strings.Compare("a", "b")) // -1 fmt.Println(strings.Compare("b", "a")) // 1 fmt.Println("abc" == "abc") // true
文字列の比較。一緒なら0を返す。
strings.Compare(s1, s2)
としたとき、
- s1とs2が一致しているなら0を返す。
- 辞書順で
s1 < s2
なら-1を返す。 - 辞書順で
s1 > s2
なら1を返す。
文字列の中に特定の文字列が存在するか
fmt.Println(strings.Contains("abcdef\n", "\n")) // true
指定した文字数をカウント
fmt.Println(strings.Count("aaa", "a")) // 3
空白文字でsplit
fmt.Println(strings.Fields("ab cd ef")) // [ab cd ef]
[ab cd ef]
はslice型で返ってくる。
先頭/終端文字列の一致確認
fmt.Println(strings.HasPrefix("prefix_abc", "prefix")) // true fmt.Println(strings.HasPrefix("prefix_abc", "abc")) // false fmt.Println(strings.HasSuffix("prefix_abc", "prefix")) // false fmt.Println(strings.HasSuffix("prefix_abc", "abc")) // true
文字列のインデックスを取得
fmt.Println(strings.Index("abcc", "c")) // 2 fmt.Println(strings.Index("abcc", "z")) // -1 fmt.Println(strings.LastIndex("abcc", "c")) // 3
strings.Index(s, substr)
はs
の先頭からsubstr
を探して最初に見つかったインデックスを返す。
strings.LastIndex(s, substr)
はs
の終端からsubstr
を探して最初に見つかったインデックスを返す。
slice内の文字列を連結
s := []string{"a", "b", "c"} fmt.Println(strings.Join(s, ",")) // "a,b,c"
文字列置換
fmt.Println(strings.Replace("abc abc", "a", "z", 1)) // "zbc abc" fmt.Println(strings.ReplaceAll("abc abc", "a", "z")) // "zbc zbc"
strings.Replace()
の最後の引数は置換する文字数。
strings.ReplaceAll()
は一致する文字列を全て置換する。
文字列を分割
fmt.Println(strings.Split("a,b,c", ",")) // [a b c] fmt.Println(strings.SplitAfter("a,b,c", ",")) // [a, b, c]
strings.SplitAfter()
は指定した区切り文字の後でSplitする。
文字列の削除
fmt.Println(strings.Trim("aaxaa", "a")) // "x" fmt.Println(strings.TrimLeft("aaxaa", "a")) // "xaa" fmt.Println(strings.TrimRight("aaxaa", "a")) // "aax" fmt.Println(strings.TrimRight("aaxaa", "xa")) // "" fmt.Println(strings.TrimPrefix("aaxaa", "aa")) // "xaa" fmt.Println(strings.TrimSuffix("aaxaa", "aa")) // "aax" fmt.Println(strings.TrimSpace(" aaxaa ")) // "aaxaa"
strings.Trim()
指定した文字列を両端から削除していく。
strings.Trim()
とstrings.TrimLeft()
とstrings.TrimRight()
は例えば第二引数に"ab"
と指定したらa
とb
を削除する。
一方、strings.TrimPrefix()
とstrings.TrimSuffix()
は第二引数に"ab"
と指定したらab
を探して削除しようとする。