我有一个字符串,类似于"test123abc45alsdkfj";,我想让我的扫描仪先读取"test"
,然后读取123
,再读取"abc"
,最后读取45
,然后读取"alsdkfj"
。有点像C++中的字符串流,有办法做到这一点吗?谢谢
我认为有一种简单的方法,希望它能帮助你
package main
import (
"fmt"
"strings"
"text/scanner"
)
func isDigit(c byte) bool {
if c >= 48 && c <= 57 {
return true
}
return false
}
func main() {
const src = `test123abc45alsdkfj`
var s scanner.Scanner
s.Init(strings.NewReader(src))
for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() {
chars := s.TokenText()
temp := string(chars[0])
for i := range chars {
if i > 0 {
if isDigit(chars[i]) != isDigit(chars[i-1]) {
fmt.Println(temp)
temp = string(chars[i])
} else {
temp += string(chars[i])
}
}
}
}
}
并且输出将是
test
123
abc
45