導入
ユーザー入力やファイルから読み込んだデータは、たいてい文字列です。それを整形したり、数値に変換して計算したりする作業は、Go プログラムのほぼすべてに登場します。この2つのパッケージが、その基本装備です。
説明
strings パッケージは、文字列の検索・分割・結合・整形を担当します。
package main
import (
"fmt"
"strings"
)
func main() {
line := " Go,Python,Rust "
trimmed := strings.TrimSpace(line)
langs := strings.Split(trimmed, ",")
fmt.Println(langs)
fmt.Println(strings.Join(langs, " / "))
fmt.Println(strings.ToUpper(langs[0]))
fmt.Println(strings.Contains(trimmed, "Python"))
}
strings.TrimSpace(...)… 前後の空白(スペース・タブ・改行)を取り除く。外部から来た文字列の下処理にほぼ必須。strings.Split(s, 区切り)… 区切り文字でスライスに分割する。strings.Join(スライス, 区切り)…Splitの逆で、スライスを1本の文字列に結合する。strings.ToUpper/strings.Contains… 大文字化や部分一致の判定。
よく使う関数をもう少し挙げます。
| 関数 | 役割 |
|---|---|
strings.HasPrefix(s, "go") | s が "go" で始まるか |
strings.ReplaceAll(s, "旧", "新") | すべて置換 |
strings.Count(s, "a") | "a" の出現回数 |
strings.Fields(s) | 連続する空白で分割(CSVでない自由記述向き) |
strconv パッケージは、文字列と数値の変換を担当します。
n, err := strconv.Atoi("123") // 文字列 → int
s := strconv.Itoa(456) // int → 文字列
f, err2 := strconv.ParseFloat("3.14", 64) // 文字列 → float64
Atoi(ASCII to integer)は変換に失敗すると err が nil ではなくなります。ユーザー入力を数値として扱うときは、error を必ず確認する習慣をつけましょう。
n2, err3 := strconv.Atoi("abc")
fmt.Println(n2, err3) // 0 strconv.Atoi: parsing "abc": invalid syntax
やってみよう
strings.Split で分けたスライスの各要素に対して strconv.Atoi を呼び、数値に変換してから合計する――という「文字列 → 分割 → 変換 → 集計」の流れは、CSVのような簡易データを読むときの定番パターンです。
演習
カンマ区切りの文字列 csv := "120,340,75" を strings.Split で分割し、strconv.Atoi で1つずつ数値に変換して合計を求め、"合計: 数値" の形で出力してください(変換に失敗した要素は無視してよい)。
ヒント1を見る
strings.Split(csv, ",") で []string が得られます。for _, p := range parts { ... } で1つずつ処理しましょう。
ヒント2を見る
n, err := strconv.Atoi(p) で変換し、err != nil ならその要素は continue で飛ばし、そうでなければ total += n を積み上げます。最後に fmt.Println("合計:", total)。