pet*_*rSO 14
在Go中,字符string
s是UTF-8编码的Unicode代码点.UTF-8是可变长度编码.
对于带有范围子句的语句
为一个字符串值,在串中的Unicode码点"范围"的条款进行迭代开始于字节索引0.连续迭代,该指数值将是连续的UTF-8编码的码点的第一个字节的索引字符串和rune类型的第二个值将是相应代码点的值.如果迭代遇到无效的UTF-8序列,该第二值将是0xFFFD,Unicode替换字符,并在下一次迭代将字符串中推进一个字节.
例如,
package main
import "fmt"
func trimLeftChar(s string) string {
for i := range s {
if i > 0 {
return s[i:]
}
}
return s[:0]
}
func main() {
fmt.Printf("%q\n", "Hello, ??")
fmt.Printf("%q\n", trimLeftChar(""))
fmt.Printf("%q\n", trimLeftChar("H"))
fmt.Printf("%q\n", trimLeftChar("?"))
fmt.Printf("%q\n", trimLeftChar("Hello"))
fmt.Printf("%q\n", trimLeftChar("??"))
}
Run Code Online (Sandbox Code Playgroud)
游乐场:https://play.golang.org/p/t93M8keTQP_I
输出:
"Hello, ??"
""
""
""
"ello"
"?"
Run Code Online (Sandbox Code Playgroud)
或者,对于更一般的功能,
package main
import "fmt"
func trimLeftChars(s string, n int) string {
m := 0
for i := range s {
if m >= n {
return s[i:]
}
m++
}
return s[:0]
}
func main() {
fmt.Printf("%q\n", trimLeftChars("", 1))
fmt.Printf("%q\n", trimLeftChars("H", 1))
fmt.Printf("%q\n", trimLeftChars("?", 1))
fmt.Printf("%q\n", trimLeftChars("Hello", 1))
fmt.Printf("%q\n", trimLeftChars("??", 1))
fmt.Println()
fmt.Printf("%q\n", "Hello, ??")
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 0))
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 1))
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 7))
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 8))
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 9))
fmt.Printf("%q\n", trimLeftChars("Hello, ??", 10))
}
Run Code Online (Sandbox Code Playgroud)
游乐场:https://play.golang.org/p/ECAHl2FqdhR
输出:
""
""
""
"ello"
"?"
"Hello, ??"
"Hello, ??"
"ello, ??"
"??"
"?"
""
""
Run Code Online (Sandbox Code Playgroud)
参考文献:
Cer*_*món 12
假设问题使用"character"来引用Go称为符文的内容,那么使用utf8.DecodeRuneInString来获取第一个符文的大小然后切片:
func trimFirstRune(s string) string {
_, i := utf8.DecodeRuneInString(s)
return s[i:]
}
Run Code Online (Sandbox Code Playgroud)
这对我有用:
package main
import "fmt"
func main() {
input := "abcd"
fmt.Println(input[1:])
}
Run Code Online (Sandbox Code Playgroud)
输出是:
bcd
Run Code Online (Sandbox Code Playgroud)
Go Playground 上的代码:https : //play.golang.org/p/iTv7RpML3LO