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 つある。
- 置換したい文字列
- 置換前の文字
- 置換後の文字
- 置換する回数
次のコードの出力結果を考えてみよう。
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