序章

Goのstringパッケージには、文字列データ型を操作するために使用できるいくつかの関数があります。 これらの関数を使用すると、文字列を簡単に変更および操作できます。 関数は、コードの要素に対して実行するアクションと考えることができます。 組み込み関数は、Goプログラミング言語で定義されており、すぐに使用できる関数です。

このチュートリアルでは、Goで文字列を操作するために使用できるいくつかの異なる関数を確認します。

文字列を大文字と小文字にする

関数strings.ToUpperおよびstrings.ToLowerは、元の文字列のすべての文字が大文字または小文字に変換された文字列を返します。 文字列は不変のデータ型であるため、返される文字列は新しい文字列になります。 文字以外の文字列内の文字は変更されません。

文字列"Sammy Shark"をすべて大文字に変換するには、strings.ToUpper関数を使用します。

ss := "Sammy Shark"
fmt.Println(strings.ToUpper(ss))
Output
SAMMY SHARK

小文字に変換するには:

fmt.Println(strings.ToLower(ss))
Output
sammy shark

stringsパッケージを使用しているため、最初にそれをプログラムにインポートする必要があります。 文字列を大文字と小文字に変換するには、プログラム全体を次のようにします。

package main

import (
	"fmt"
	"strings"
)

func main() {
	ss := "Sammy Shark"
	fmt.Println(strings.ToUpper(ss))
	fmt.Println(strings.ToLower(ss))
}

strings.ToUpperおよびstrings.ToLower関数を使用すると、大文字と小文字を一貫させることで、文字列の評価と比較が簡単になります。 たとえば、ユーザーが名前をすべて小文字で書き込んだ場合でも、すべて大文字のバージョンと照合することで、名前がデータベースにあるかどうかを判断できます。

文字列検索関数

stringsパッケージには、文字列に特定の文字シーケンスが含まれているかどうかを判断するのに役立つ多くの関数があります。

働き 使用する
strings.HasPrefix 文字列を最初から検索します
strings.HasSuffix 文字列を最後から検索します
strings.Contains 文字列内の任意の場所を検索します
strings.Count 文字列が表示される回数をカウントします

strings.HasPrefixおよびstrings.HasSuffixを使用すると、文字列が特定の文字セットで開始または終了するかどうかを確認できます。

たとえば、文字列"Sammy Shark"Sammyで始まり、Sharkで終わるかどうかを確認するには次のようにします。

ss := "Sammy Shark"
fmt.Println(strings.HasPrefix(ss, "Sammy"))
fmt.Println(strings.HasSuffix(ss, "Shark"))
Output
true true

strings.Contains関数を使用して、"Sammy Shark"にシーケンスShが含まれているかどうかを確認します。

fmt.Println(strings.Contains(ss, "Sh"))
Output
true

最後に、Sという文字がSammy Sharkというフレーズに何回出現するかを確認します。

fmt.Println(strings.Count(ss, "S"))
Output
2

注:Goのすべての文字列では大文字と小文字が区別されます。 これは、Sammysammyと同じではないことを意味します。

小文字のsを使用してSammy Sharkからカウントを取得することは、大文字のSを使用することと同じではありません。

fmt.Println(strings.Count(ss, "s"))
Output
0

Ssとは異なるため、返されるカウントは0になります。

文字列関数は、プログラム内の文字列を比較または検索する場合に役立ちます。

文字列の長さの決定

組み込み関数len()は、文字列内の文字数を返します。 この関数は、パスワードの最小長または最大長を強制する必要がある場合、または省略形として使用するために特定の制限内に収まるように大きな文字列を切り捨てる必要がある場合に役立ちます。

この関数を示すために、文の長さの文字列の長さを見つけます。

import (
	"fmt"
	"strings"
)

func main() {
        openSource := "Sammy contributes to open source."
        fmt.Println(len(openSource))
}
Output
33

変数openSourceを文字列"Sammy contributes to open source."と等しく設定し、その変数をlen(openSource)を使用してlen()関数に渡しました。 最後に、関数をfmt.Println()関数に渡して、プログラムの出力を画面に表示できるようにしました…

len()関数は、文字、数字、空白文字、記号など、二重引用符で囲まれたすべての文字をカウントすることに注意してください。

文字列操作のための関数

strings.Joinstrings.Split、およびstrings.ReplaceAll関数は、Goで文字列を操作するためのいくつかの追加の方法です。

strings.Join関数は、文字列のスライスを新しい単一の文字列に結合するのに役立ちます。

文字列のスライスからコンマ区切りの文字列を作成するには、次のようにこの関数を使用します。

fmt.Println(strings.Join([]string{"sharks", "crustaceans", "plankton"}, ","))
Output
sharks,crustaceans,plankton

新しい文字列の文字列値の間にコンマとスペースを追加する場合は、コンマの後に空白を使用して式を書き換えることができます:strings.Join([]string{"sharks", "crustaceans", "plankton"}, ", ")

文字列を結合できるのと同じように、文字列を分割することもできます。 これを行うには、strings.Split関数を使用して、スペースを分割します。

balloon := "Sammy has a balloon."
s := strings.Split(balloon, " ")
fmt.Println(s)
Output
[Sammy has a balloon]

出力は文字列のスライスです。 strings.Printlnを使用したため、出力を見てもわかりにくいです。 それが実際に文字列のスライスであることを確認するには、fmt.Printf関数と%q動詞を使用して文字列を引用します。

fmt.Printf("%q", s)
Output
["Sammy" "has" "a" "balloon."]

strings.Splitに加えて、もう1つの便利な機能はstrings.Fieldsです。 違いは、strings.Fieldsはすべての空白を無視し、実際のfieldsのみを文字列に分割することです。

data := "  username password     email  date"
fields := strings.Fields(data)
fmt.Printf("%q", fields)
Output
["username" "password" "email" "date"]

strings.ReplaceAll関数は、元の文字列を取得して、置換された更新された文字列を返すことができます。

サミーが持っていた風船がなくなったとしましょう。 サミーにはこのバルーンがなくなったため、新しい文字列でサブ文字列"has"を元の文字列balloonから"had"に変更します。

fmt.Println(strings.ReplaceAll(balloon, "has", "had"))

括弧内の最初は、元の文字列を格納する変数balloonです。 2番目のサブストリング"has"は置き換えたいものであり、3番目のサブストリング"had"はその2番目のサブストリングを置き換えるものです。 これをプログラムに組み込むと、出力は次のようになります。

Output
Sammy had a balloon.

文字列関数strings.Joinstrings.Split、およびstrings.ReplaceAllを使用すると、Goで文字列を操作するためのより優れた制御が可能になります。

結論

このチュートリアルでは、Goプログラムで文字列を操作および操作するために使用できる、文字列データ型の一般的な文字列パッケージ関数のいくつかについて説明しました。

他のデータ型の詳細については、データ型の理解を参照してください。文字列の詳細については、文字列の操作の概要を参照してください。