3 回答

TA貢獻1876條經驗 獲得超5個贊
在 Go 中,字符串字符值是以 UTF-8 編碼的 Unicode 字符。UTF-8 是一種可變長度編碼,每個字符使用一到四個字節。
對于你的例子:
package main
import (
"fmt"
"unicode/utf8"
)
func is10Hyphen(s string) bool {
for n := 1; len(s) > 0; n++ {
r, size := utf8.DecodeRuneInString(s)
if r == utf8.RuneError && (size == 0 || size == 1) {
return false
}
if n == 10 {
return r == '-'
}
s = s[size:]
}
return false
}
func main() {
s := "absoloute-power"
fmt.Println(is10Hyphen(s))
s = "absoloute+power"
fmt.Println(is10Hyphen(s))
s = "absoloute"
fmt.Println(is10Hyphen(s))
}
游樂場:https://play.golang.org/p/h9rMQWWAdvb
輸出:
true
false
false
如果您愿意考慮遇到 Unicode 替換字符錯誤,那么對于您的示例:
func is10Hyphen(s string) bool {
n := 0
for _, r := range s {
if r == utf8.RuneError {
return false
}
n++
if n == 10 {
return r == '-'
}
}
return false
}
游樂場: https: //play.golang.org/p/SHbPAnldTyw

TA貢獻1853條經驗 獲得超6個贊
您可以使用符文數組:
text := "ifthisisyourstring"
chars := []rune(text)
if chars[0] == '1' {
// is true
}

TA貢獻2016條經驗 獲得超9個贊
由于string實際上是一個數組,所以可以直接訪問第10個位置。當然,需要避免“超出范圍”錯誤。對于非ascii編碼的情況,將其轉換為rune數組
package main
import (
"fmt"
)
func main() {
fmt.Println(Check("213123-dasdas"))
fmt.Println(Check("213123sdas"))
fmt.Println(Check("213123das-das"))
fmt.Println(Check("213123dasda-s"))
fmt.Println(Check("---------2----------"))
}
func Check(ss string) bool {
r = []rune(ss)
if len(r) < 10 {
return false
}
return ss[r] == '-'
}
- 3 回答
- 0 關注
- 200 瀏覽
添加回答
舉報