如何用字母和数值标记字符串

问题描述

我有一个像“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