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

2023-12-27

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

例如,如果我有一个字符串"hello"该方法应该返回5。我看到了len(str)返回字节数and not字符数所以len("£")返回 2 而不是 1,因为 £ 在 UTF-8 中使用两个字节进行编码。


你可以试试RuneCountInString http://golang.org/pkg/unicode/utf8/#RuneCountInString来自 utf8 包。

返回 p 中的符文数量

即,如图所示这个脚本 http://play.golang.org/p/zzB1VrwdER:“World”的长度可能是6(中文写成“世界”),但“世界”的符文数是2:

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

Phrozen https://stackoverflow.com/users/383848/phrozen adds 在评论中 https://stackoverflow.com/questions/12668681/go-language-string-length/12668840#comment39875126_12668840:

其实你可以做len()仅通过类型转换来覆盖符文。
len([]rune("世界"))将打印2。至少在 Go 1.3 中是这样。


CL 108985 https://go-review.googlesource.com/c/go/+/108985(2018 年 5 月,Go 1.11),len([]rune(string))现已优化。 (修复问题 24923 https://github.com/golang/go/issues/24923)

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

添加一个新的运行时函数来计算字符串中的符文数量。 修改编译器以检测模式len([]rune(string))并将其替换为新的符文计数运行时函数。

RuneCount/lenruneslice/ASCII        27.8ns ± 2%  14.5ns ± 3%  -47.70%
RuneCount/lenruneslice/Japanese     126ns ± 2%   60  ns ± 2%  -52.03%
RuneCount/lenruneslice/MixedLength  104ns ± 2%   50  ns ± 1%  -51.71%

斯特凡·施泰格 https://stackoverflow.com/users/155077/stefan-steiger指向博客文章“Go 中的文本规范化 https://blog.golang.org/normalization"

什么是角色?

正如在字符串博客文章 http://blog.golang.org/strings, 字符可以跨越多个符文.
例如,一个 'e' 和 '◌́◌́'(锐音“\u0301”)可以组合形成 'é'(“e\u0301“在 NFD 中)。这两个符文合在一起就是一个字符.

字符的定义可能因应用程序而异。
For 正常化 https://godoc.org/golang.org/x/text/unicode/norm我们将其定义为:

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

标准化算法一次处理一个字符。

使用该包及其Iter type https://godoc.org/golang.org/x/text/unicode/norm#Iter,“字符”的实际数量为:

package main
    
import "fmt"
import "golang.org/x/text/unicode/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: %d\n", nc)
}

在这里,这使用了Unicode 规范化形式 http://unicode.org/reports/tr15/#Norm_FormsNFKD《兼容性分解》


Oliver https://stackoverflow.com/users/2046109/oliver's answer https://stackoverflow.com/a/55151396/6309指着UNICODE 文本分割 http://unicode.org/reports/tr29/作为可靠地确定某些重要文本元素(用户感知的字符、单词和句子)之间的默认边界的唯一方法。

为此,您需要一个外部库,例如里沃/尤尼塞格 https://github.com/rivo/uniseg,这确实Unicode 文本分割.

这实际上会算“grapheme https://en.wikipedia.org/wiki/Grapheme cluster”,其中多个代码点可以组合成一个用户感知的字符。

package uniseg
    
import (
    "fmt"
    
    "github.com/rivo/uniseg"
)
    
func main() {
    gr := uniseg.NewGraphemes("????????!")
    for gr.Next() {
        fmt.Printf("%x ", gr.Runes())
    }
    // Output: [1f44d 1f3fc] [21]
}

两个字素,尽管有三个符文(Unicode 代码点)。

您可以在“中查看其他示例”如何操作GO中的字符串来反转它们? https://stackoverflow.com/a/62743214/6309"

????????‍???? 单独是一个字素,但是,从unicode 到代码点转换器 https://onlineunicodetools.com/convert-unicode-to-code-points, 4 个符文:

  • ????: 女性 (1f469) https://apps.timwhitlock.info/unicode/inspect/hex/1F469
  • 深色皮肤 (1f3fe) https://apps.timwhitlock.info/unicode/inspect/hex/1f3fe
  • 零宽度连接器 (200d) https://apps.timwhitlock.info/unicode/inspect/hex/200d
  • ????红发 (1f9b0) https://apps.timwhitlock.info/unicode/inspect/hex/1f9b0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取字符串中的字符数 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 确定 C 字符串是否是 C 中的有效 int

    我需要检查 C 字符串是否是有效整数 我都尝试过 int num atoi str and int res sscanf str d num 但发送字符串 8 9 10 这两行都仅返回 8 而没有指示该字符串的无效性 谁能提出替代方案 看看
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 根据值匹配数组

    我使用以下代码来解析 yaml 并应得到输出为runners对象和函数build应更改数据结构并根据以下结构提供输出 type Exec struct NameVal string Executer string 这是我尝试过的 但我不知道
  • Swift 仅删除字符串中的尾随空格

    SO 中的许多示例都固定两侧 即前导和尾随 我的要求只是关于尾随 我的输入文本是 保持我的左侧 期望的输出 保持我的左侧 当然 这个命令会删除两端 let cleansed messageText trimmingCharacters in
  • 将字符串拆分为数组,在 Swift 中保留定界符/分隔符

    寻找一种 优雅的 解决方案来分割字符串并将分隔符保留为数组中的项目 示例1 hello world hello world 示例2 hello world hello world thx 假设您要使用名为的分隔符分割字符串separator
  • jquery构建http查询字符串

    我有一个这样的对象 Object id myid token sometoken 我需要构建一个 HTTP 查询字符串并得到如下内容 http domain com file html id myid token sometoken 我有什
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • 为什么 Microsoft 的 std::string 实现需要堆栈上的 40 个字节?

    最近看过这个视频 https www youtube com watch v kPR8h4 qZdk关于 facebook 对 string 的实现 我很好奇微软实现的内部原理 不幸的是 字符串文件 在 VisualStudioDirect
  • 如何在Python中的字符串中插入变量值

    这是一个简单的例子 amount1 input Insert your value amount2 input Insert your value print Your first value is amount1 your second
  • GORM中的一对多递归关系

    我需要有一个Organization与父级有关系 像这样的事情 type Organization struct gorm Model Parent Organization gorm ForeignKey ParentId Name st
  • 屏蔽字符串

    我需要将收到的字符串放入以下格式 在打字稿 javascript中 Eg 12 34 56 789 我知道有string mask以及通过 JQuery 的某种方式 有没有更简单的方法来做到这一点 您可以用所需的数据替换每个模式部分 fun
  • Go 编程语言中的“方法需要指针接收器”

    我刚刚看到了 Go 编程语言的演示 并想尝试写几行 一切工作正常 直到我尝试在这种情况下使用界面 我该如何解决这个问题 package main import fmt type entity float32 func e entity in
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1

随机推荐

  • PHP 中的 Twitter 机器人有问题吗?

    我已经用 php 构建了一个 Twitter 机器人 它能够接收消息并响应消息 但出现了这个问题 当我向机器人发送消息时 我必须刷新机器人脚本才能让机器人回复 我希望机器人能够不断检查任何新传入的消息并做出相应的响应 我该如何修复这个错误
  • 复制/移动省略与显式删除的复制/移动构造函数

    我想知道复制 移动省略何时适用 或允许适用 显式deleted 复制 移动构造函数和非deleted 复制 移动构造函数 具体如下 可以明确地deleted 复制 ctor 或移动 ctor 被删除 是否尝试从另一个相同类型的对象或临时对象
  • 沙盒应用程序和 NSOpenPanel 导致崩溃

    我正在我的 Cocoa 应用程序中做一个简单的文件打开面板 我启用权利和应用程序沙箱 但在 OS X 10 9 上 当应用程序应使用以下命令打开对话框时NSOpenPanel 它崩溃了 应用具体信息 由于未捕获的异常 NSObjectNot
  • 如何在 XSLT 1.0 中查找当前日期

    我在检索 XSLT 代码中的当前日期时遇到麻烦 我正在使用 1 0 版和 MSXSL exe 应用程序来触发我的 xslt 代码 我尝试使用以下代码行来实现此功能 但它不起作用 貌似1 0版本不支持当前日期功能 您能否提供适用于 xslt
  • 在 JavaScript 中检查文本框值是字符串还是数字

    基本上我有以下代码
  • ld:重复符号

    我正在做一个学校项目 我从 Xcode 中收到一些奇怪的错误 我正在使用 TextMate 的 Command R 功能来编译该项目 编译似乎工作正常 但链接失败并出现我不明白的错误消息 ld输出 ld path final build f
  • 在 Kivy 中创建动态绘制的线条

    这是我的帖子的延续 在 Kivy 中使用和移动小部件 按钮 https stackoverflow com questions 25273046 using and moving widgets buttons in kivy 我想在 Ki
  • 如何在 statefulset 中设置 kubernetes pod 的主机名

    我正在使用 Statefulset 并且启动了多个 Pod 但它们不是彼此的复制品 我想设置 pod 的主机名 并将这些主机名作为环境变量传递给所有 pod 以便它们可以相互通信 我尝试在 pod 规范下使用主机名 但主机名永远不会设置为指
  • CUDA 共享内存问题(以及将 CUDA 与 python/ctypes 一起使用)

    不知怎的 当我修改时d updated water flow map在下面的代码中 d terrain height map也被修改 相反 更改两个数组的分配顺序可以解决问题 但我认为这只是掩盖了问题的根本原因 cudaCheck cuda
  • 此 for 循环的时间复杂度: for (i = 2; i < N; i = i * i)?

    我们现在正在学习时间复杂度 而我在这个例子中遇到了很多麻烦 for i 2 i lt n i i i do something 教授说这是 O sqrt N 但我不确定我是否相信 毕竟 如果 N 16 它只运行 2 次 而不是 4 次 对吧
  • 在升级之前如何查看 npm 包的发行说明?

    npm 注册表是否以标准化方式公开发行说明 我在以下位置看到过发行说明 自述文件 md 在 GitHub 上作为标记版本 没有描述 在 GitHub 上作为带有描述的标记版本 虽然 SemVer 至少让我知道是否有重大更改 但如果能够查看软
  • Magento db连接参数不会改变,疯狂缓存?

    我已将整个 www 目录从 Web 服务器复制到我的本地工作站 我正在尝试让 Magento 连接到本地数据库 是的 我更改了 magento app etc local xml 文件中的连接字符串值 我已经验证了大约一百次 它已经被改变了
  • C++:使用显式指定引用类型作为类型参数的模板函数

    我正在玩 C 模板类型推导并成功编译了这个小程序 template
  • Actionscript 3 克隆影片剪辑

    我们如何克隆 实例名称 的副本 多谢你们 test close是我在画布上绘制的实例名称 var cloneMe MovieClip new MovieClip cloneMe graphics copyFrom test clone gr
  • Windows Phone 8 - 流式传输 Podcast MP3 文件

    我正在创建一个应用程序 该应用程序读取单个播客提要 该应用程序独有 并在LongListSelector 我可以通过解析 RSS 文件来获取每集的 MP3 URI 我想添加这样的功能 当用户点击列表中的某个项目时 URI 会传递到音频流媒体
  • 可扩展列表视图 setOnChildClickListener 不起作用

    我正在使用可扩展的列表视图 我在onceate方法中给出了setOnChildClickListener 但 setOnChildClickListener 不起作用 我正在寻找解决方案 但我找不到任何解决方案 这里给出我所做的 publi
  • 如何使用 jQuery 防止双击?

    我有一个这样的按钮
  • 通过google BigQuery将unsigned int转换为signed int

    我尝试在 google BigQuery api 上运行查询并得到如下异常 函数 IF 中的参数类型不匹配 distinctPlayers 的类型为 TYPE UINT64 0 的类型为 TYPE INT32 查询太大 所以我只写了失败的部
  • 正则表达式中的否定

    我想在 JavaScript 中使用正则表达式进行表单输入验证 这些是一个字符串 不应包含 或我提到的任何特定字符集 如果字符串不包含这些字符 则测试应该通过 那么我如何在正则表达式中指定没有 char Example stringX vi
  • 如何获取字符串中的字符数

    Go中如何获取字符串的字符数 例如 如果我有一个字符串 hello 该方法应该返回5 我看到了len str 返回字节数and not字符数所以len 返回 2 而不是 1 因为 在 UTF 8 中使用两个字节进行编码 你可以试试RuneC