Golang 统计字符串字数的方法示例

 更新时间:2018年05月09日 14:04:53   作者:小谈博客  
本篇文章主要介绍了Golang 统计字符串字数的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

比如新浪微博发微博的输入框有一个已输入字数的统计,它的规则推测是:汉字和中文标点算 1 个字数,英文和其他符号算 0.5 个字数。不足 1 个字算 1 个。大家可以去微博体验一下计算方式。

golang 可以使用正则和 unicode 包的方法判断。

以下函数 GetStrLength 返回输入的字符串的字数,每个汉字和中文标点算 1 个字数,英文和其他字符算半个字数,不足 1 个字算 1 个。

// GetStrLength 返回输入的字符串的字数,汉字和中文标点算 1 个字数,英文和其他字符 2 个算 1 个字数,不足 1 个算 1个
func GetStrLength(str string) float64 {
 var total float64
 reg := regexp.MustCompile("/·|,|。|《|》|‘|'|”|“|;|:|【|】|?|(|)|、/") 
 for _, r := range str {
 if unicode.Is(unicode.Scripts["Han"], r) || reg.Match([]byte(string(r))) {
 total = total + 1
 } else {
 total = total + 0.5
 }
 } 
 return math.Ceil(total)
}

1:获取字符串字节的个数,并按字节挨个输出

package main

import (
  "fmt"
)

func main() {
  var str string = "abc郑闯" //共9个字节
  charray := []byte(str)  //转换为byte:一个字节对应一个数组元素
  fmt.Println(len(charray)) //获取元素的个数,结果为9
  for _, v := range charray {
    fmt.Printf("%c", v) //输出结果为:abcéé¯
  }
}

输出:

9
abcéé¯

2:获取字符串元素的个数,并按元素挨个输出

package main
import (
  "fmt"
)

func main() {
  a := "I love my family!我爱我的家人!"
  b := []rune(a)   //转换为rune:一个字符对应一个元素 (共24个)
  fmt.Println(len(b)) //获取元素的个数(24)
  for _, v2 := range b {
    fmt.Printf("%c", v2) //输出结果:I love my family!我爱我的家人!
  }
}

输出:

24
I love my family!我爱我的家人!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Go标准库http server优雅启动深入理解

    Go标准库http server优雅启动深入理解

    这篇文章主要介绍了Go标准库http server优雅启动深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • go语言计算两个时间的时间差方法

    go语言计算两个时间的时间差方法

    这篇文章主要介绍了go语言计算两个时间的时间差方法,涉及Python操作时间的技巧,需要的朋友可以参考下
    2015-03-03
  • Go设计模式之代理模式图文详解

    Go设计模式之代理模式图文详解

    这篇文章将通过图文讲解给大家详细的介绍一下Go代理模式,代理模式是一种结构型设计模式,代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理,感兴趣的同学跟着小编一起来看看吧
    2023-07-07
  • Go gRPC服务proto数据验证进阶教程

    Go gRPC服务proto数据验证进阶教程

    这篇文章主要为大家介绍了Go gRPC服务proto数据验证进阶教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言-为什么返回值为接口类型,却返回结构体

    Go语言-为什么返回值为接口类型,却返回结构体

    这篇文章主要介绍了Go语言返回值为接口类型,却返回结构体的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang grpc配置使用实战

    golang grpc配置使用实战

    本文主要介绍了golang grpc配置使用实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Go初学者踩坑之go mod init与自定义包的使用

    Go初学者踩坑之go mod init与自定义包的使用

    go mod是go的一个模块管理工具,用来代替传统的GOPATH方案,下面这篇文章主要给大家介绍了关于Go初学者踩坑之go mod init与自定义包的使用,需要的朋友可以参考下
    2022-10-10
  • go语法入门泛型type parameters简称T(类型形参)两种场景使用

    go语法入门泛型type parameters简称T(类型形参)两种场景使用

    这篇文章主要为大家介绍了go语法入门泛型type parameters简称T(类型形参)两种场景使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 使用Go goroutine实现并发的Clock服务

    使用Go goroutine实现并发的Clock服务

    这篇文章主要为大家详细介绍了如何使用Go goroutine实现并发的Clock服务,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • Go泛型实战教程之如何在结构体中使用泛型

    Go泛型实战教程之如何在结构体中使用泛型

    这篇文章主要介绍了Go泛型实战教程之如何在结构体中使用泛型,根据Go泛型使用的三步曲提到的:类型参数化、定义类型约束、类型实例化我们一步步来定义我们的缓存结构体,需要的朋友可以参考下
    2022-07-07

最新评论