グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



Go言語の標準ライブラリstringsパッケージについて調べてみた ~その2~

前回の記事はこちら:Go言語の標準ライブラリstringsパッケージについて調べてみた ~その1~

今回も引き続き、標準ライブラリについて理解を深めるためにstringsパッケージについて調べてみました。

Count

Countはある文字列の中に、指定した文字列がいくつあるかを数えます。早速コードを書いてみます。

fmt.Println(strings.Count("abcdefg", "a"))      // 1
fmt.Println(strings.Count("abcdefg", "abc"))    // 1
fmt.Println(strings.Count("abcdefg", "ace"))    // 0
fmt.Println(strings.Count("i my me mine", "m")) // 3
fmt.Println(strings.Count("aaaaa", "aa"))       // 2
fmt.Println(strings.Count("teenage", "e"))      // 3
fmt.Println(strings.Count("abc", ""))           // 4

aaaaaaaは二つとカウントされています。関数の説明に、重複しないようにカウントするように書いてあるのでこのような結果になっているようです。また、第二引数に空文字列を指定すると、文字数 + 1の結果が返されるようです。どういう理屈でプラス1されるのか気になります。

Cut

Cutは指定されたセパレータで文字列を分割する関数のようです。返り値は三つで、セパレータより前の部分の文字列、セパレータより後ろ部分の文字列、セパレータが見つかったかを表すbool値です。

s := "abcdef"
sep := "cd"
before, after, found := strings.Cut(s, sep)
if found {
    fmt.Printf("before: %v\nafter: %v\n", before, after)
    // before: ab
    // after: ef
}

s = "weekend"
sep = "e"
before, after, found = strings.Cut(s, sep)
if found {
    fmt.Printf("before: %v\nafter: %v\n", before, after)
    // before: w
    // after: ekend
}

s = "This is a book."
sep = "are"
before, after, found = strings.Cut(s, sep)
if found {
    fmt.Printf("before: %v\nafter: %v\n", before, after)
} else {
    fmt.Println("not found") // not found
}

weekendのように、セパレータの文字列が複数含まれる文字列に対しては一番最初の文字列を対象にして切り分けるようです。

CutPrefix

CutPrefixは、指定されたプレフィックス(接頭辞)が文字列の先頭にあるかどうかを確認し、それが存在する場合、プレフィックスを削除して残りの文字列を返す関数のようです。

s := "forever"
prefix := "for"
after, found := strings.CutPrefix(s, prefix)
if found {
    fmt.Println(after) // ever
} else {
    fmt.Println("not found")
}

s = "forever"
prefix = "ever"
after, found = strings.CutPrefix(s, prefix)
if found {
    fmt.Println(after)
} else {
    fmt.Println("not found") // not found
}

CutSuffix

CutSuffixは、指定されたサフィックス(接尾辞)が文字列の末尾にあるかどうかを確認し、それが存在する場合、サフィックスを削除して残りの文字列を返す関数のようです。

s := "forever"
suffix := "ever"
before, found := strings.CutSuffix(s, suffix)
if found {
    fmt.Println(before) // for
}

s = "forever"
suffix = "for"
before, found = strings.CutSuffix(s, suffix)
if found {
    fmt.Println(before)
} else {
    fmt.Println("not found") // not found
}

さいごに

今回はstringsパッケージのCountからCutSuffixまでの関数の使い方を調べました。今回の内容はわりと直感的にすぐ理解できるわかりやすい関数だったかと思います。また、コーディングテスト等で入力値を整えたりする際に便利だと思いました。

この記事を書いた人

wanderlust
wanderlust事業開発部 web application engineer
これまで農業、士業と経験し、まったく異業種のエンジニアとしてアーティスに入社。
現在は事業開発部でバックエンドエンジニアとして仕事に従事。可読性の高いコードが書けるよう日々勉強中。趣味は一人旅。
この記事のカテゴリ
RECOMMENDED

関連記事

関連する記事はありません

FOLLOW US

最新の情報をお届けします