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

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

一段文字中夹杂了中英文字符,需要计算其在屏幕所占的宽度,直接计算字符数量肯定是不行的,因为汉字的宽度是普通英文字符的 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}

相关文章

楚人隐形原文在线阅读
28365365bet官网

楚人隐形原文在线阅读

09-20 阅读: 3851
e3cpu哪个性能最高-至强cpu性能排行
365dni是真的吃吗

e3cpu哪个性能最高-至强cpu性能排行

07-01 阅读: 3378
【百,奭,陌】的甲骨文金文篆文字形演变含义日期:2023-03-19 来源:甲骨密码评论:0点击:
苹果手机通话如何录音?掌握4种实用方法!
365dni是真的吃吗

苹果手机通话如何录音?掌握4种实用方法!

10-15 阅读: 2401
耳朵总是痒,却啥也掏不出来?可能暗示这 5 种问题,快自查
笔记本电脑显卡排名
365bet国际娱乐网址

笔记本电脑显卡排名

10-10 阅读: 7392