如何获取Golang字符串的最后X个字符?

sou*_*cey 50 string character go

如果我有字符串"12121211122"并且我想获得最后3个字符(例如"122"),那么Go中是否可以?我看了string包裹,没有看到任何类似的东西getLastXcharacters.

One*_*One 92

您可以在字符串上使用切片表达式来获取最后三个字节.

s      := "12121211122"
first3 := s[0:3]
last3  := s[len(s)-3:]
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是unicode,您可以执行以下操作:

s      := []rune("??????")
first3 := string(s[0:3])
last3  := string(s[len(s)-3:])
Run Code Online (Sandbox Code Playgroud)

检查GoSlice Tricks中的字符串,字节,符文和字符.

  • 考虑这个问题询问的是字符而不是字节,不是字符串,不是字符串。在这种情况下,答案似乎与问题不符。答案的“字符串”部分[在unicode输入上失败](https://play.golang.org/p/c4B4XjZW5p),而除非有提供将字符串转换为符文切片的方法,否则该符文切片不适用回答问题。我想比@SimonFox更好地了解一个有效的答案。即使使用`utf8.RuneCountInString(s)`也适得其反,因为它仍然会扫描字符串。 (2认同)

Sim*_*Fox 12

答案取决于你对"人物"的意思.如果你的意思是字节然后:

s := "12121211122"
lastByByte := s[len(s)-3:]
Run Code Online (Sandbox Code Playgroud)

如果你的意思是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:]
Run Code Online (Sandbox Code Playgroud)

您还可以将字符串转换为[]符文并对符文切片进行操作,但这会分配内存.