0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GOでlen()を使用し正しく文字数を取得する

Posted at

len()について

func len(v Type ) int

len()は引数の型に応じて引数の長さを返す関数で、配列の要素数、スライスの要素数を返すことが可能です。

これを文字列に使用した場合の注意点として、取得できるのは文字数ではなく、引数のバイト数ということです。

つまり文字列に対してlen()を使用した場合、下記のような結果となります。

test.go
var string_jp = "あいうえお"
var string_en = "aiueo"

println("日本語文字数", len(string_jp))
println("英語文字数", len(string_en))

実行結果

日本語文字数 15
英語文字数 5

GO言語は標準でUTF-8(1文字あたり、1〜4バイトで表現する)が使用されており

多くの日本語:3バイト
半角英数字:1バイト

となるため、これでは文字数を正しく取得することが出来ません。

正しく文字数を取得するためには?

正しく文字数を取得するためには「unicode/utf-8」パッケージの[]rune()を使用する必要があります。

[]rune()

[]rune()はUnicodeのコードポイント(世界中の文字を16進数で表したもの)を取得することが可能で、1文字単位で文字数を取得することが出来ます。

実際に動かしてみると

test.go
var string_jp = "あいうえお"
var string_en = "aiueo"

println("日本語文字数", len([]rune(string_jp)))
println("英語文字数", len([]rune(string_en)))

実行結果

日本語文字数 5
英語文字数 5

となり正しい文字数を取得することができます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?