Irohabook
0
5395

Golangの文字列(代入、結合・連結、部分文字列、置換)

文字列の代入

変数を定義すると同時に代入するときは、イコールの前にコロンをつける。

a := "あいう"

コロンをつけないとエラーになる。

package main

import "fmt"

func main() {
    a := "あいう"
    fmt.Println(a)
}

文字列の結合

文字列は足し算でつなぐ。

package main

import "fmt"

func main() {
    a := "あいう"
    b := "えお"
    c := a + b
    fmt.Println(c)
}

出力

あいうえお

文字列の配列

文字列の配列は

a := []string{"あいう", "えお"}

のように定義する。

入力

package main

import (
    "fmt"
)

func main() {
    a := []string{"あいう", "えお"}
    fmt.Println(a)
}

出力

[あいう えお]

問題:[Google Apple Amazon Facebook] という配列を作れ。

解答

package main

import (
    "fmt"
)

func main() {
    a := []string{"Google", "Apple", "Amazon", "Facebook"}
    fmt.Println(a)
}

文字列の配列を連結して新しい文字列を作る

[Google Apple Amazon Facebook] という配列から

Google ... Apple ... Amazon ... Facebook

という文字列を作るには Join という関数を使う。これは strings パッケージに入っている。

package main

import (
    "fmt"
    "strings"
)

func main() {
    a := []string{"Google", "Apple", "Amazon", "Facebook"}
    b := strings.Join(a, " ... ")
    fmt.Println(b)
}

strings.Join の引数に配列と連結文字を指定する。上の例は連結に ... という文字列を指定した。

文字列の部分文字列

文字列を文字の配列とみなして、文字列の一部分を取りだすことができる。

package main

import (
    "fmt"
)

func main() {
    a := "MacBookPro"
    fmt.Println(a[:5])
    fmt.Println(a[3:])
    fmt.Println(a[2:6])
}

結果は次のようになる。

MacBo
BookPro
cBoo

a[:5] は最初から 5 文字を部分文字列にする。カッコの中に指定する数が部分文字列の文字数である。文字列の文字数を超えるとエラーになる。実際に部分文字列を扱うときは if を使う。

a[3:] は最初から 3 文字分を消して、残りを部分文字列にする。

日本語の部分文字列

上の方法はコードとして不十分である。例えば

package main

import (
    "fmt"
)

func main() {
    a := "あいうえお"
    fmt.Println(a[:2])
}

の結果は?である。「あい」を返すには次のように工夫する。

package main

import (
    "fmt"
)

func main() {
    a := "あいうえお"
    b := string([]rune(a)[:2])
    fmt.Println(b)
}

期待通り「あい」が返る。

文字列の置換

文字列の置換は strings.Replace を使う。

package main

import (
    "fmt"
    "strings"
)

func main() {
    a := "あいうえお"
    b := strings.Replace(a, "あい", "山田", 1)
    fmt.Println(b)
}

出力

山田うえお

Replace の引数は 4 つある。

  1. 置換したい文字列
  2. 置換前の文字
  3. 置換後の文字
  4. 置換する回数

次のコードの出力結果を考えてみよう。

package main

import (
    "fmt"
    "strings"
)

func main() {
    a := "a b a b a b"
    b := strings.Replace(a, "a", "Apple", 2)
    fmt.Println(b)
}

答えは

Apple b Apple b a b

である。

可能な限り置換したいときは、回数に -1 を指定する。

package main

import (
    "fmt"
    "strings"
)

func main() {
    a := "a b a b a b"
    b := strings.Replace(a, "a", "Apple", -1)
    fmt.Println(b)
}

出力

Apple b Apple b Apple b
次の記事

Go入門