ホームページ  >  記事  >  バックエンド開発  >  スライスする golang 文字列

スライスする golang 文字列

WBOY
WBOYオリジナル
2023-05-10 09:55:361191ブラウズ

golang では、文字列型は不変型です。つまり、その値を直接変更することはできません。ただし、シナリオでは、文字列型を変更可能な文字シーケンス (スライス) に変換する必要がある場合があります。この記事では、この変換を実現する 2 つの方法を紹介します。

方法 1: strings パッケージを使用する

strings パッケージは、golang 標準ライブラリの文字列処理パッケージであり、文字列をスライスに変換するメソッドを提供します。

import "strings"

func StringToSlice(s string) []rune {
    return []rune(s)
}

このメソッドではルーン タイプが使用されます。ルーン タイプは Unicode 文字を表し、中国語、日本語、韓国語、その他の言語の文字を含めることができます。文字列型をルーン型にキャストすることで、変更可能な文字列(スライス)を取得できます。

次は、このメソッドの使用法を示す簡単な例です:

package main

import (
    "fmt"
    "strings"
)

func StringToSlice(s string) []rune {
    return []rune(s)
}

func main() {
    s := "hello world"
    sl := StringToSlice(s)
    sl[0] = 'H'
    fmt.Println(sl)
    fmt.Println(strings.ToUpper(string(sl)))
}

プログラム出力:

[72 101 108 108 111 32 119 111 114 108 100]
HELLO WORLD

StringToSlice 関数によって返されたスライスを strings.ToUpper に渡すことによって関数を使用すると、文字列をすべて大文字に変換できます。

方法 2: バイト スライスの使用

strings パッケージの使用に加えて、文字列型をバイト スライスに変換し、そのバイト スライスをルーン型スライスに変換することもできます。

func StringToSlice(s string) []rune {
    bs := []byte(s)
    rs := make([]rune, len(bs))
    for i, b := range bs {
        rs[i] = rune(b)
    }
    return rs
}

このメソッドでは、8 ビットの符号なし整数を表すバイト型スライスを使用します。文字列型をバイト型スライスにキャストすることで、バイト単位で格納されたシーケンスを取得できます。バイト型スライスを走査し、各要素をルーン型に変換し、最後にルーン型スライスを返します。

次は、このメソッドの使用例です:

package main

import (
    "fmt"
)

func StringToSlice(s string) []rune {
    bs := []byte(s)
    rs := make([]rune, len(bs))
    for i, b := range bs {
        rs[i] = rune(b)
    }
    return rs
}

func main() {
    s := "hello world"
    sl := StringToSlice(s)
    sl[0] = 'H'
    fmt.Println(sl)
}

プログラム出力:

[72 101 108 108 111 32 119 111 114 108 100]

方法 1 と同様に、文字列を使用してスライスを文字列に変換することもできます。パッケージが提供する文字列操作関数は、文字列の大文字小文字の変換などの操作を実現します。

結論

一般に、文字列および文字シーケンスの処理には、strings パッケージによって提供される API を使用することをお勧めします。これは、パフォーマンスが向上するだけでなく、より多くの種類のセキュリティも提供されるためです。ただし、一部の特殊なケースでは、バイト スライスはさまざまなニーズに適応できる、より柔軟な処理方法を提供します。

以上がスライスする golang 文字列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。