LoginSignup
32
9

More than 3 years have passed since last update.

Go言語における文字列の「長さ」と「文字数」を取得する処理の違い

Last updated at Posted at 2019-11-04

Go言語で文字列の長さを取得する場合

Go言語の文字列の特徴として、UTF-8エンコードされた「byte」配列のように振る舞うことが出来る。

このため、配列と同様に「len」組み込み関数を使用して長さを取得し、インデックスを使ったアクセスなどが可能になる。

ちなみに「len」組み込み関数が返すのは「文字数」ではなく「バイト長」
なので今回の例では、「len」組み込み関数を使ったパターンになる。

*なおここでは「配列」と表記しているが、実際にはスライス

string_len.go
package main

import "fmt"

func main() {
    //string型の変数を宣言
    var en string = "golang"
    var ja string = "Go言語"

    //文字列の長さ(バイト長)を出力
    fmt.Println(en, "len:", len(en))
    fmt.Println(ja, "len:", len(ja))
}

実行結果

user$ go run string_len.go
golang len: 6
Go言語 len: 8

取得するのが「バイト長」なので、「Go言語」の場合文字数の「4」ではなくバイト長の「8」が実行結果として出力されている。

Go言語で文字数を取得する場合

一方、文字数を取得するには「unicode/utf-8」パッケージの「RuneCountInString」関数を使用する。

※RuneとはUnicode文字のこと

string_count.go
package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    //string型の変数を宣言
    var ja string = "Go言語"

    //文字数を出力
    fmt.Println(ja, "len:", utf8.RuneCountInString(ja))
}

実行結果

user$ go run string_count.go
Go言語 len: 4

「Go言語」の文字数である「4」が無事に出力されました!

32
9
1

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
32
9