Go での文字列操作: テキストを更新する方法

Go での文字列操作: テキストを更新する方法

文字列操作はソフトウェア開発の基本です。結局、ほとんどのプログラミング言語は文字列型を提供します。文字列は、文字、数字、記号などの一連の文字です。

文字列操作は、テキスト処理やデータ分析から Web 開発まで、さまざまなアプリケーションに役立ちます。一般的な文字列操作操作は、連結、データ検証、抽出、および書式設定です。Go は、標準ライブラリで「strings」という名前の文字列操作パッケージを提供します。

弦のパッケージ

stringsパッケージは、文字列操作やその他の操作に役立つさまざまな関数を提供します。このパッケージには、部分文字列の操作、トリミング、文字列の比較、文字列の変換、文字列の作成、分割などの機能が含まれています。

インポートのリストでパッケージ名を指定することにより、strings パッケージをインポートできます。

import "strings"

部分文字列の検索

文字列パッケージには、部分文字列を検索するための 3 つの関数( Contains関数、ContainsAny関数、ContainsRune関数) が用意されています。

Contains関数は、指定された文字列に部分文字列が含まれているかどうかを確認します。ContainsAny関数は、文字列の部分文字列に文字が含まれているかどうかをチェックし、ContainsRune関数は、文字列にルーン文字 (Unicode 文字) が含まれているかどうかをチェックします。

import (
    "fmt"
    "strings"
)

func main() {
    aString: = "Hello, World!"
    substring: = "World"
    characters: = "aeiou"
    aRune: = 'o'


    fmt.Println(strings.Contains(aString, substring)) // Output: true
    fmt.Println(strings.ContainsAny(aString, characters)) // Output: true
    fmt.Println(strings.ContainsRune(aString, aRune)) // Output: true
}

IndexIndexAnyIndexByte、およびIndexFunc関数を使用して、部分文字列のインデックスを取得できます。Index関数は、部分文字列が別の特定の文字列にある場合、その部分文字列のインデックスを返します。IndexAny関数は、Unicode コード ポイントの最初のインスタンスのインデックスを返します。文字が存在しない場合は-1を返します。

import (
    "fmt"
    "strings"
)

func main() {
    aString: = "Hello, world!"
    substring: = "world"
    chars: = "wrld"
    byteCharacter: = byte('o')
    aRune: = rune('o')

    fmt.Println(strings.Index(aString, substring)) // Output: 7
    fmt.Println(strings.IndexAny(aString, chars)) // Output: 7
    fmt.Println(strings.IndexByte(aString, byteCharacter)) // Output: 4

    f: = func(r rune) bool {
        return r == 'o'
    }

    fmt.Println(strings.IndexFunc(aString, f)) // Output: 4
    fmt.Println(strings.IndexRune(aString, aRune)) // Output: 4
}

IndexByteは、文字列内のバイト文字の最初のインスタンスのインデックスまたは-1を返します。IndexFunc関数は、指定された関数を満たす最初の Unicode ポイントの文字列へのインデックスを返します最後に、IndexRune関数は、ルーンの Unicode コード ポイントの最初のインスタンスのインデックスを返します。

Go での部分文字列の置換

ReplaceおよびReplaceAll関数は、部分文字列の置換に役立ちます。Replace関数は、文字列、元の部分文字列、および置換といくつかの置換を受け取ります。ReplaceAll関数は、文字列、最初の部分文字列、および置換のみを受け取ります。

import (
    "fmt"
    "strings"
)

func main() {
    theString: = "This is a test string to be modified."
    fmt.Println(strings.Replace(theString, "is", "was", 1))
    fmt.Println(strings.Replace(theString, "is", "was", -1))
    fmt.Println(strings.ReplaceAll(theString, "is", "was"))
}

Replace と ReplaceAll の両方を使用して、文字列内のすべての出現箇所を置換できることに注意してください。

Go 置換操作の結果

文字列の分割と結合

文字列パッケージには、文字列のスライスを返す文字列を分割するためのSplit 、 SplitAfter 、 SplitAfterN 、および SplitN 関数含まます

Splitメソッドは、指定された区切り文字で分割します。Splitメソッドと同様に、 SplitAfterメソッドは文字列を分割しますが、結果にセパレーターが含まれます。

import (
    "fmt"
    "strings"
)

func main() {
    s: = "This is a test string to be split."


    fmt.Println(strings.Split(s, ""))
    fmt.Println(strings.SplitAfter(s, ""))
    fmt.Println(strings.SplitAfterN(s, "", 3))
    fmt.Println(strings.SplitN(s, "", 3))
}

SplitAfterNメソッドは、この関数が文字列を指定された最大数の部分文字列に分割する点を除いて、SplitAfter 関数と似ています。SplitNメソッドは、部分文字列に区切り記号を含めずに、文字列を指定された最大数に分割します。

stringsパッケージのJoin関数を使用して、文字列を結合できます。Join関数は、スライスと区切り文字を受け取ります。

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Join([]string{"Hello", "World"}, ":"))
   // Output: "Hello:World"
}

文字列の大文字と小文字の操作

文字列の大文字と小文字の操作は、ドキュメントの操作を含む多くのタスクで便利です。小文字にはToLower関数、大文字にはToUpper関数、タイトル ケーシングにはToTitle関数を使用できます。

import (
    "fmt"
    "strings"
)

func main() {
    s: = "This is a test string."


    fmt.Println(strings.ToLower(s)) // this is a test string.
    fmt.Println(strings.ToUpper(s)) // THIS IS A TEST STRING.
    fmt.Println(strings.ToTitle(s)) // THIS IS A TEST STRING.
}

Go での文字列の構築

文字列ビルダーは、Go で効率的な連結を可能にする型です。bytes.Buffer型は、一般的に使用される文字列ビルダーの 1 つです。bytes.Bufferメソッドは、 +操作やJoin関数とは異なり、新しいコピーを作成する必要なく、効率的な文字列の追加を可能にする、操作用の読み取りおよび書き込みメソッドを備えた拡張可能なバイト バッファーを実装します。

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder

    // Write some strings to the builder
    b.WriteString("This ")
    b.WriteString("is ")
    b.WriteString("a ")
    b.WriteString("test ")
    b.WriteString("string.")

    // Get the length of the builder
    fmt.Println(b.Len())

    // Convert the builder to a string
    str: = b.String()
    fmt.Println(str)

    // Reset the builder
    b.Reset()

    // Write some more strings to the builder
    b.WriteString("This ")
    b.WriteString("is ")
    b.WriteString("another ")
    b.WriteString("test ")
    b.WriteString("string.")

    // Get the capacity of the builder
    fmt.Println(b.Cap())

    // Convert the builder to a string again
    str = b.String()
    fmt.Println(str)
}

main関数は、strings.Builder 型を使用して効率的な文字列を作成する方法を示していますStrings.Builder型のWriteStringメソッドは、文字列のシーケンスを相互に拡張し、Lenメソッドは構築された文字列の長さを返します。

Stringメソッドはビルダーのコンテンツを文字列に変換し、Resetメソッドは追加の文字列構築のためにビルダーをリセットします。

Capメソッドはビルダーの容量を返します。これは、Go が文字列に割り当てた現在のスペースです。

文字列構築操作の結果

Go での文字列トリミング

stringsパッケージは、 TrimTrimLeftTrimPrefixTrimRightTrimSpace 、およびTrimSuffix関数で文字列をトリミングする機能も提供します。

import (
    "strings"
    "fmt"
)

func main() {
    // the full string
    s: = "Hello, World!"

    // the element for the trim
    prefix: = "Hello"
    suffix: = "World!"

    // trims a string by specified trim set
    fmt.Println(strings.Trim(s, "!"))

    // trims out by spaces in the beginning and end of the string
    fmt.Println(strings.TrimSpace(s))

    // trims from the left string by specified trim set
    fmt.Println(strings.TrimLeft(s, "Hello"))

    // trims out from the right string by specified trim set
    fmt.Println(strings.TrimRight(s, "World!"))

    // trims out a prefix
    fmt.Println(strings.TrimPrefix(s, prefix))

    // trims out a specific suffix
    fmt.Println(strings.TrimSuffix(s, suffix))
}

メイン関数は、関数をトリミングに使用する方法を示しています。さまざまな関数がさまざまな方法でs文字列をトリミングします。

トリミング操作の結果

Go で文字列をフォーマットできます

Go 標準ライブラリには、文字列の書式設定用の fmt パッケージも用意されています。fmt パッケージは、Go で効率的な文字列の書式設定を行うために、C スタイルの書式設定動詞を使用します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です