为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中解析 unicode 数字

在 Go 中解析 unicode 数字

Go
Helenr 2022-12-19 11:52:55
其他答案提到使用unicode.IsDigit()来检查给定的符文是否是数字,但是我怎么知道它是哪个数字呢?Atoi 和 ParseInt fromstrconv不会解析它。IsDigit 检查其中包含所有这些代码点的表格,但我无法从中找出任何东西。许多数字范围以 0 结尾的代码点处的 0 数字开头,但不是全部,所以我不能只是char & 0xF.我唯一的其他想法是是否有办法访问符文的 unicode 名称,或者是否可以访问属性。每个数字 unicode 字符(甚至分数)似乎在幕后都有一个与之关联的纯 ASCII 数字作为属性,但我似乎无法找到一种方法来访问该信息或名称(所有 unicode 数字的名称都以结尾例如在“DIGIT ZERO”中)任何地方。我是在标准库之外寻找/构建这个吗?
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

使用runenames包根据名称识别数字。

这不是标准库包,但它是golang.org/x/的一部分

这些包是 Go 项目的一部分,但在主 Go 树之外。它们是在比 Go 核心更宽松的兼容性要求下开发的。使用“go get”安装它们。

import (

    "golang.org/x/text/unicode/runenames"


    "fmt"

    "strings"

)


func whatDigit(digit rune) int {

    var name = runenames.Name(digit)

    switch {

    case strings.Contains(name, "DIGIT ZERO"):

        return 0

    case strings.Contains(name, "DIGIT ONE"):

        return 1

    case strings.Contains(name, "DIGIT TWO"):

        return 2

    case strings.Contains(name, "DIGIT THREE"):

        return 3

    case strings.Contains(name, "DIGIT FOUR"):

        return 4

    case strings.Contains(name, "DIGIT FIVE"):

        return 5

    case strings.Contains(name, "DIGIT SIX"):

        return 6

    case strings.Contains(name, "DIGIT SEVEN"):

        return 7

    case strings.Contains(name, "DIGIT EIGHT"):

        return 8

    case strings.Contains(name, "DIGIT NINE"):

        return 9

    default:

        return -1

    }


    return 0

}

该软件包确实提到了一个文件https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt,它似乎有每个字符的更多信息,包括指定字符在纯 ASCII 中的数字,但是,此包仅提供名称。仅浏览文档,名称似乎遵循whatDigit函数中显示的模式。


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号