LoginSignup
22
8

More than 5 years have passed since last update.

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

Posted at

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にキャストすればいいです。

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

22
8
0

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
  3. You can use dark theme
What you can do with signing up
22
8