Goでの文字列を分割する方法
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
- Goは、
strings.Fields
、strings.Split
、strings.FieldsFunc
など、文字列を分割するための複数の関数を提供します。 - 正規表現は、複雑な文字列分割のシナリオで使用できます。
- 適切なメソッドの選択は、区切り文字の種類と分割条件の複雑さによって異なります。
文字列操作はプログラミングの基本的な側面であり、特定の区切り文字に基づいて文字列をサブ文字列に分割することは一般的なタスクです。Goでは、strings
パッケージがこのような操作を効率的に処理するためのさまざまな関数を提供しています。この記事では、Goで文字列を分割するためのさまざまな方法を検討します。これには、スペース、特定の文字または文字列、複数の文字による分割、および正規表現の使用が含まれます。
スペースによる分割
スペースで文字列を分割するために、Goはstrings.Fields
関数を提供しています。この関数は、入力文字列を空白文字に基づいてサブ文字列に分割し、これらのサブ文字列のスライスを返します。
package main import ( "fmt" "strings" ) func main() { str := " foo bar baz " fields := strings.Fields(str) fmt.Printf("Fields are: %q\n", fields) }
出力:
Fields are: ["foo" "bar" "baz"]
この例では、strings.Fields
は先頭と末尾のスペースを無視し、空白文字の各シーケンスで文字列を分割します。
特定の文字または文字列による分割
特定の文字またはサブ文字列で文字列を分割するには、strings.Split
関数を使用します。この関数は、入力文字列と区切り文字を受け取り、区切り文字の出現ごとに文字列を分割します。
package main import ( "fmt" "strings" ) func main() { str1 := "a,b,c" split1 := strings.Split(str1, ",") fmt.Printf("%q\n", split1) str2 := "a man a plan a canal panama" split2 := strings.Split(str2, "a ") fmt.Printf("%q\n", split2) }
出力:
["a" "b" "c"]
["" "man " "plan " "canal panama"]
最初のケースでは、文字列は各コンマで分割されます。2番目のケースでは、文字列はサブ文字列 "a " の出現ごとに分割されます。
複数の文字による分割
区切り文字が複数の文字で構成されている場合、strings.FieldsFunc
を使用できます。この関数は、文字が区切り文字であるかどうかを判断するユーザー定義関数に基づいて文字列を分割します。
package main import ( "fmt" "strings" "unicode" ) func main() { str := " foo1;bar2,baz3..." f := func(c rune) bool { return !unicode.IsLetter(c) && !unicode.IsNumber(c) } fields := strings.FieldsFunc(str, f) fmt.Printf("Fields are: %q\n", fields) }
出力:
Fields are: ["foo1" "bar2" "baz3"]
この例では、strings.FieldsFunc
は関数f
を使用して区切り文字を判別します。関数f
は、文字または数字ではない文字を区切り文字とみなし、句読点やスペースで文字列を効果的に分割します。
複数の文字列による分割
Go 1.20の時点では、標準ライブラリは複数のサブ文字列で文字列を直接分割する関数を提供していません。ただし、この機能はstrings.Split
への呼び出しをチェーン化するか、正規表現を使用することで実現できます。
package main import ( "fmt" "regexp" ) func main() { str := "Hello, This is my, first code in, Golang!" re := regexp.MustCompile(",\\s*") split := re.Split(str, -1) fmt.Println(split) }
出力:
[Hello This is my first code in Golang!]
この例では、正規表現を使用して、コンマの後に続く任意の数のスペースで文字列を分割します。
正規表現を使用した分割
より複雑な分割シナリオでは、正規表現が強力なツールとなります。regexp
パッケージのSplit
メソッドを使用すると、パターンに基づいて文字列を分割できます。
package main import ( "fmt" "regexp" ) func main() { str := "Hello :), This is my, first code in, Golang!" re := regexp.MustCompile(`:\),\s*`) split := re.Split(str, -1) fmt.Println(split) }
出力:
[Hello This is my first code in Golang!]
ここでは、正規表現:\),\s*
は、笑顔 :)
の後に続く任意の数のスペースに一致し、それに応じて文字列を分割します。
結論
Goは、strings
およびregexp
パッケージを通じて、文字列を分割するための堅牢なツールを提供します。区切り文字の性質や分割条件の複雑さなど、特定の要件に応じて、開発者は適切な関数を選択して、文字列をサブ文字列に効率的に分割できます。これらの関数とそのアプリケーションを理解することは、Goでの効果的な文字列操作に不可欠です。
FAQs
strings.Fields
は空白に基づいて分割し、空のフィールドを無視しますが、strings.Split
は指定された区切り文字の出現ごとに分割します。
はい、strings.FieldsFunc
を文字ベースの分割に使用するか、regexp.Split
を複数のサブ文字列による分割に使用できます。
いいえ、ただし、正規表現パターンでregexp.Split
を使用してこれを実現できます。
Leapcellのご紹介。Goプロジェクトのホスティングに最適です。
Leapcellは、ウェブホスティング、非同期タスク、Redisのための次世代サーバーレスプラットフォームです。
多言語対応
- Node.js、Python、Go、またはRustで開発できます。
無料での無制限のプロジェクトのデプロイ
- 使用量に対してのみ支払い - リクエストや料金はかかりません。
比類なき費用対効果
- アイドル料金なしの従量課金制。
- 例:$25で平均応答時間60msで694万件のリクエストに対応します。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリクスとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を簡単に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中できます。
詳細については、ドキュメントをご覧ください!
Xでフォローしてください: @LeapcellHQ