Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
strings.Contains() / HasPrefix() / HasSuffix()
Goの『strings』パッケージには文字列の検索・判定に使える便利な関数が揃っています。『strings.Contains()』『strings.HasPrefix()』『strings.HasSuffix()』などで文字列の検索を行えます。
構文
import "strings" // 部分文字列が含まれているか判定します。 ok := strings.Contains(s, substr) // 指定した文字列で始まるか判定します。 ok := strings.HasPrefix(s, prefix) // 指定した文字列で終わるか判定します。 ok := strings.HasSuffix(s, suffix) // 部分文字列の出現回数を数えます。 n := strings.Count(s, substr) // 最初に一致した位置(バイトオフセット)を返します(ない場合は-1)。 idx := strings.Index(s, substr) // 最後に一致した位置を返します(ない場合は-1)。 idx := strings.LastIndex(s, substr)
関数一覧
| 関数 | 概要 |
|---|---|
| strings.Contains(s, substr) | sにsubstrが含まれていればtrueを返します。 |
| strings.ContainsAny(s, chars) | sにcharsの文字が1文字でも含まれていればtrueを返します。 |
| strings.ContainsRune(s, r) | sにルーンrが含まれていればtrueを返します。 |
| strings.HasPrefix(s, prefix) | sがprefixで始まればtrueを返します。 |
| strings.HasSuffix(s, suffix) | sがsuffixで終わればtrueを返します。 |
| strings.Count(s, substr) | s内のsubstrの重複しない出現回数を返します。 |
| strings.Index(s, substr) | sでsubstrが最初に現れるバイトインデックスを返します(ない場合-1)。 |
| strings.LastIndex(s, substr) | sでsubstrが最後に現れるバイトインデックスを返します(ない場合-1)。 |
| strings.EqualFold(s, t) | 大文字小文字を区別せず比較します。 |
サンプルコード
package main
import (
"fmt"
"strings"
)
func main() {
s := "Hello, Go言語!Goは素晴らしい。"
// Contains:部分文字列の存在チェック
fmt.Println("'Go'を含む:", strings.Contains(s, "Go"))
fmt.Println("'Java'を含む:", strings.Contains(s, "Java"))
fmt.Println("'a'か'e'を含む:", strings.ContainsAny(s, "ae"))
fmt.Println()
// HasPrefix / HasSuffix:先頭・末尾チェック
fmt.Println("'Hello'で始まる:", strings.HasPrefix(s, "Hello"))
fmt.Println("'!'で始まる:", strings.HasPrefix(s, "!"))
fmt.Println("'。'で終わる:", strings.HasSuffix(s, "。"))
fmt.Println("'Go'で終わる:", strings.HasSuffix(s, "Go"))
fmt.Println()
// Count:出現回数
fmt.Println("'Go'の出現回数:", strings.Count(s, "Go"))
fmt.Println("'は'の出現回数:", strings.Count(s, "は"))
fmt.Println()
// Index / LastIndex:位置の取得
fmt.Println("'Go'の最初の位置:", strings.Index(s, "Go"))
fmt.Println("'Go'の最後の位置:", strings.LastIndex(s, "Go"))
fmt.Println("'Rust'の位置:", strings.Index(s, "Rust")) // ない場合は -1
fmt.Println()
// EqualFold:大文字小文字を無視した比較
fmt.Println("'go'と'GO'は同じ(大小無視):", strings.EqualFold("go", "GO"))
fmt.Println("'Hello'と'hello'は同じ(大小無視):", strings.EqualFold("Hello", "hello"))
}
概要
Goの文字列はUTF-8バイト列として扱われます。そのため、『strings.Index()』が返すのは文字(ルーン)のインデックスではなくバイトのインデックスです。日本語などのマルチバイト文字を扱う場合、バイトインデックスと文字インデックスは異なることに注意してください。文字(ルーン)単位での検索が必要な場合は『strings.IndexRune()』を使います。
strings.Index()が返すのはバイトオフセットです。例えば'あ'(3バイト)の位置が3なら、スライスでs[3:]のようにアクセスできますが、「3文字目」ではありません。文字数のカウントにはlen()ではなくutf8.RuneCountInString()を使ってください。
文字列の分割・結合・置換は『strings.Split() / Join() / Replace()』、大文字小文字変換は『strings.ToUpper() / ToLower() / TrimSpace()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。