LoginSignup
9

More than 5 years have passed since last update.

posted at

Goで文字列の先頭から特定の文字数だけ切り取りたい

Goで文字列の先頭から特定の文字数だけを出力するのが、意外と悩んだのでちょっとメモします。

Goでは文字列はbyteのsliceのような扱いになります。なのでASCIIコードはいいのですが、UTF-8の文字列を適当に扱うと、UTF-8の文字列として不正なバイト列になることがあります(UTF-8は変なところで切ると必ず不正なバイト列になる)。

今回は『こんにちは』という文字列の先頭2文字だけを表示することを考えます。

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    str := "こんにちは"

    fmt.Println(len(str))
    fmt.Println(utf8.RuneCountInString(str))
    fmt.Println(str[:3])
    fmt.Println(string([]rune(str)[:2]))
}

出力:

15
5
こ
こん

文字列でlenを使うとバイト列としての長さが出るので、ひらがなだと文字数の3倍になるはずです。UTF-8の文字列としての長さを知りたい場合はutf8.RuneCountInStringを使う必要があります。

そしてruneというのがUTF-8の1文字を表すので、文字列をruneのsliceにキャストします。そうすれば先頭2文字を切り出す事はできるので、それをstringにキャストすればいいです。

もっと簡単にできる方法があれば、教えてくれるとうれしいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9