问题描述
我有一个像“test123abc45alsdkfj”这样的字符串,我希望我的扫描仪首先读取"test"
,然后是123
,然后是"abc"
,然后是45
,然后"alsdkfj"
。有点像 C++ 中的 stringstream,有没有办法做到这一点?谢谢!
解决方法
我觉得有这样一个简单的方法,希望对你有帮助
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