web-dev-qa-db-fra.com

Comment obtenir les X derniers caractères d'une chaîne Golang?

Si j'ai la chaîne "12121211122" et que je souhaite obtenir les 3 derniers caractères (par exemple, "122"), est-ce possible dans Go? J'ai regardé dans le paquetage string et je n'ai rien vu qui ressemble à getLastXcharacters.

50
sourcey

Vous pouvez utiliser une expression slice expression sur une chaîne pour obtenir les trois derniers octets.

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

Ou si vous utilisez Unicode, vous pouvez faire quelque chose comme:

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

Vérifiez chaînes, octets, runes et caractères dans Go et astuces de tranches .

92
OneOfOne

La réponse dépend de ce que vous entendez par "caractères". Si vous voulez dire octets alors:

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

Si vous voulez dire des runes dans une chaîne encodée en utf-8, alors:

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

Vous pouvez également convertir la chaîne en une rune [] et opérer sur la tranche de rune, mais cela alloue de la mémoire.

12
Simon Fox