亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號