【问题标题】:How to tokenize string with alphabetical and numerical values如何用字母和数值标记字符串
【发布时间】:2021-01-05 01:54:55
【问题描述】:

我有一个类似“test123abc45alsdkfj”的字符串,我希望我的扫描仪首先读取"test",然后是123,然后是"abc",然后是45,然后是"alsdkfj"。有点像 C++ 中的字符串流,有没有办法做到这一点?谢谢!

【问题讨论】:

  • “我的扫描仪”是指text/scanner包吗?
  • 您的问题现在无法回答。它没有解释你需要做什么(只是你需要标记一个字符串——而不是如何)。此外,这不是代码编写服务。您必须包括您的最佳尝试,并说明您需要帮助解决什么问题。

标签: string go stringtokenizer


【解决方案1】:

我觉得有这样一个简单的方法,希望对你有帮助

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

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2019-12-01
    • 2019-09-20
    • 2018-09-08
    • 2020-03-30
    • 2018-11-28
    相关资源
    最近更新 更多