takuroooのブログ

勉強したこととか

Go stringsで文字列を操作する

Goの文字列操作を勉強したのでそのまとめ。

目次

stringsパッケージに文字列操作のためな便利な関数があるのでまずはこれをimportする。

import (
    "strings"
)

golang.org

大文字小文字変換

// 大文字小文字変換
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"と指定したらabを削除する。

一方、strings.TrimPrefix()strings.TrimSuffix()は第二引数に"ab"と指定したらabを探して削除しようとする。

github.com