分享
  1. 首页
  2. 文章

Go 中如何获取字符串的宽度

xnotepad · · 3326 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一段文字中夹杂了中英文字符,需要计算其在屏幕所占的宽度,直接计算字符数量肯定是不行的,因为汉字的宽度是普通英文字符的 2 倍, 一种方法先统计汉字的数量,但是还有诸如全角数字等,情况会相对比较复杂。

在 unicode 中为大部分字符都指定了字符所占的宽度:

  • East Asian Fullwidth (F): 全角字符,比如:123,ABC;
  • East Asian Halfwidth (H): 半角字符,比如:123, ABC;
  • East Asian Wide (W): 宽字符,比如汉字;
  • East Asian Narrow (Na): 窄字符,比如 123,ABC;
  • East Asian Ambiguous (A): 不确定宽窄的字符,比如 \u01d4;

具体的定义可参考 http://www.unicode.org/reports/tr11/#Definitions

在 go 的扩展包 width 包含了用于判断字符宽度的功能,对此功能稍加包装即可:

 1import "golang.org/x/text/width"
 2
 3func Width(s string) (w int) {
 4 for _, r := range s {
 5 switch width.LookupRune(r).Kind() {
 6 case width.EastAsianFullwidth, width.EastAsianWide:
 7 w += 2
 8 case width.EastAsianHalfwidth, width.EastAsianNarrow,
 9 width.Neutral, width.EastAsianAmbiguous:
10 w += 1
11 }
12 }
13
14 return w
15}

本作品采用署名 4.0 国际 (CC BY 4.0)进行许可。

唯一链接:https://caixw.io/posts/2023/go-get-string-width.html


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3326 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏