栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获取字符串中的字符数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获取字符串中的字符数?

您可以

RuneCountInString
从utf8包中尝试。

返回p中的符文数

如该脚本所示:“世界”的长度可能为6(用中文写成“世界”),但符文数为2:

package mainimport "fmt"import "unipre/utf8"func main() {    fmt.Println("Hello, 世界", len("世界"), utf8.RuneCountInString("世界"))}

实际上

len()
,只需键入强制转换即可完成符文。
len([]rune("世界"))
将打印
2
。在Go 1.3中。


借助CL 108985(2018年5月,适用于Go
1.11),

len([]rune(string))
现已进行了优化。(修复了问题24923)

编译器

len([]rune(string))
自动检测模式,并将其替换为r:= range调用。

添加一个新的运行时函数以计算字符串中的符文。修改编译器以检测模式,

len([]rune(string))
并将其替换为新的符文计数运行时函数。

RuneCount/lenruneslice/ASCII       27.8ns ± 2%  14.5ns ± 3%  -47.70%  (p=0.000 n=10+10)RuneCount/lenruneslice/Japanese     126ns ± 2%    60ns ± 2%  -52.03%  (p=0.000 n=10+10)RuneCount/lenruneslice/MixedLength  104ns ± 2%    50ns ± 1%  -51.71%  (p=0.000 n=10+9)

Stefan Steiger指向博客文章“
Go中的文本规范化 ”

什么是角色?

正如字符串博客文章中提到的那样, 角色可以跨越多个符文
例如,一个’

e
‘和’◌́◌́’(急性“ u0301”)可以组合成一个’é’(
eu0301
在NFD中为“ ”)。
这两个符文合在一起是一个角色

字符的定义可能会因应用程序而异。
为了 规范化, 我们将其定义为:

  • 以起动器开始的一系列符文,
  • 不会修改或向后组合任何其他符文的符文,
  • 随后可能是空的非启动器序列,即具有此功能的符文(通常为重音符号)。

归一化算法一次处理一个字符。

使用该软件包及其

Iter
类型,“字符”的实际数量为:

package mainimport "fmt"import "golang.org/x/text/unipre/norm"func main() {    var ia norm.Iter    ia.InitString(norm.NFKD, "école")    nc := 0    for !ia.Done() {        nc = nc + 1        ia.Next()    }    fmt.Printf("Number of chars: %dn", nc)}

在这里,它使用Unipre规范化形式 NFKD“兼容性分解”


Oliver的答案指出
UNICODE TEXT SEGMENTATION
是可靠确定某些重要文本元素(用户感知的字符,单词和句子)之间默认边界的唯一方法。

为此,您需要一个像 rivo / uniseg 这样的外部库,它可以执行
Unipre Text Segmentation

将实际计数“ 字形 簇
”,其中多个码点可被组合成一个用户感知的字符。

package unisegimport (    "fmt"    "github.com/rivo/uniseg")func main() {    gr := uniseg.NewGraphemes("
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号