web-dev-qa-db-ja.com

Golang文字列の最後のX文字を取得する方法は?

「12121211122」という文字列があり、最後の3文字(「122」など)を取得したい場合、Goで可能ですか? stringパッケージを調べましたが、getLastXcharactersのようなものは見当たりませんでした。

50
sourcey

文字列に スライス式 を使用して、最後の3バイトを取得できます。

s      := "12121211122"
first3 := s[0:3]
last3  := s[len(s)-3:]

または、Unicodeを使用している場合は、次のようなことができます。

s      := []rune("世界世界世界")
first3 := string(s[0:3])
last3  := string(s[len(s)-3:])

Goの文字列、バイト、ルーン文字、文字 および スライストリック を確認します。

92
OneOfOne

答えは、「キャラクター」の意味によって異なります。バイトを意味する場合:

s := "12121211122"
lastByByte := s[len(s)-3:]

Utf-8でエンコードされた文字列でルーン文字を意味する場合、次のようになります。

s := "12121211122"
j := len(s)
for i := 0; i < 3 && j > 0; i++ {
    _, size := utf8.DecodeLastRuneInString(s[:j])
    j -= size
}
lastByRune := s[j:]

文字列を[]ルーンに変換してルーンスライスを操作することもできますが、これはメモリを割り当てます。

12
Simon Fox