Golang中获取中文字符串的子串字符位置及截取子串

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wowzai/article/details/8941865

昨天准备用golang做一个简单的文本分析,需要简单的对字符串进行一些操作,在查看了strings和strconv库时,我没找到截取字符串的函数,同时strings.Index返回的是子串的字节位置,例如这个例子:strings.Index("早上好,张先生!","好") 的返回值是6,而不是2(从0开始算)。

于是我自己写了一个处理中文的返回字符串子串位置的函数,思想其实很简单,首先通过strings库中的Index函数获得子串的字节位置,再通过这个位置获得子串之前的字节数组pre,再将pre转换成[]rune,获得[]rune的长度,便是子串之前字符串的长度,也就是子串在字符串中的字符位置,具体代码如下:

func UnicodeIndex(str,substr string) int {
  // 子串在字符串的字节位置
  result := strings.Index(str,substr)  
  if result >= 0 {
    // 获得子串之前的字符串并转换成[]byte
    prefix := []byte(str)[0:result]  
    // 将子串之前的字符串转换成[]rune
    rs := []rune(string(prefix))  
    // 获得子串之前的字符串的长度,便是子串在字符串的字符位置
    result = len(rs)
  }
  
  return result
}

注意,这里用的是string.Index函数,类似的,也可以写中文字符串的类似strings中的IndexAny,LastIndex等函数

同样的思想,我也写了一个截取中文字符串的函数,如下:

func SubString(str string,begin,length int) (substr string) {
  // 将字符串的转换成[]rune
  rs := []rune(str)
  lth := len(rs)
  
  // 简单的越界判断
  if begin < 0 {
    begin = 0
  }
  if begin >= lth {
    begin = lth
  }
  end := begin + length
  if end > lth {
    end = lth 
  }
  
  // 返回子串
  return string(rs[begin:end])
}

如有错误,欢迎指正。
————————————————
版权声明:本文为CSDN博主「wowzai」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wowzai/article/details/8941865

Golang中获取中文字符串的子串字符位置及截取子串相关推荐

  1. php繁体拼音字母,php获取中文字符串的首字符拼音字母

    $str="这是一个测试程序1"; echo getFirstCharCode($str); function getFirstCharCode($str){ $str= icon ...

  2. golang中获取字符串长度的办法

    1.不同字符与获取字符串长度 获取字符串长度,是字符串操作的重要方法.理论来说,获取字符串长度,只要从头到尾查找一遍就可以了.但遗憾的是,不同字符具有不同的编码格式.拉丁字母一个字符只要一个字节就行, ...

  3. go golang 中获取string 长度

    新博客地址(shankusu.me) 以下内容转自自 https://blog.csdn.net/skh2015java/article/details/53258249 一.获取字符串长度的几种方法 ...

  4. mysql得到中文的拼音_在MySQL中获取中文的拼音或转换中文替拼音

    在MySQL中获取中文的拼音或转换中文为拼音 MySQL ------------------------------------- 分页:select * from xxx limit 0,10 ? ...

  5. 按照拼音对数组中的中文字符串排序的算法

    按照拼音对数组中的中文字符串排序的算法,不是很难,这里直接放上代码,Demo去最下面找: 注:里面用到一个叫George的牛人写的中文转拼音首字母的函数pinyinFirstLetter,因为内容实在 ...

  6. jsp java json解析,jsp中获取json字符串,并解析

    JqueryDemo1 function showData() { var str='{ "name": "John" }';//json标准格式 var ob ...

  7. 如何提取代码中的中文字符串

    前言 在一般情况下,程序中的中文字符串都是写在某个文件中读取(例如json),但是大部分时候我们都是直接写入到代码中,这个时候如果我们想把字符串提取出来就需要一个一个去找,或者通过IDE提供的字符串匹 ...

  8. 在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码?

    在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码? Posted on 2008-07-13 12:00 尹合磊 阅读(1902) 评论(0)  编辑 收藏 所属分类: ASP.N ...

  9. .net core通过PinYinConverterCore实现汉字转拼音,获取中文字符串首字母

    文章目录 一.事故现场 二.解决方法 1.安装方法 2.代码示例 #中文转拼音 #获取中文字符串首字母 一.事故现场 项目之前使用的.net framework,可以通过引用 Microsoft.In ...

最新文章

  1. 深度学习 CNN trick 合集
  2. 单分子实时测序技术的原理与应用
  3. python 判断字符串开头_python 怎么判断字符串开头
  4. ios键盘横屏_平板电脑就只能追剧玩游戏?看这款外设键盘如何让iPad爱上办公...
  5. 从天天爱消除和节奏大师的用户对于论坛形式的分析
  6. [Unity3D] DOTween和Curvy插件,以及UI-Extension
  7. java 纳秒 秒_如何使用TimeUnit枚举将纳秒转换为秒?
  8. 介于上海与江苏的地铁小户型
  9. 总结——硬件工程师面试容易碰到的问题
  10. redis aof 文件重写机制
  11. 让逆向工程师们头疼的代码混淆,就像永远也走不出的“浪浪山”
  12. laravel 邮件发送
  13. SONiC+P4实践——P4Runtime下发ACL表项
  14. mysql hint是什么_mysql hint是什么意思
  15. Getting started with wxPython
  16. matlab读取wav,播放wav,绘制语音波形图
  17. sobel算子原理_「学术论文」基于Sobel算法图像边缘检测的FPGA实现
  18. 2023年6月PMP®项目管理认证招生简章
  19. 使用Loadrunner打开WebTours录制脚本时提示“应用程序已被Java安全阻止”如何解决
  20. Oracle的Fn无服务器平台添加了Prometheus支持和安装于Kubernetes的Helm Chart

热门文章

  1. ORACLE10G 在 LINUX环境下日志损坏后修复并重新处理数据(TEST5实例)
  2. IDL实现遥感数据的快速重投影(几何校正)- 以MODIS Swath产品为例
  3. 详解中小微风控中的财税票数据
  4. Linux:Ubuntu系统的安装
  5. Python gdal 拼图
  6. (原創) 09/07/1983 禁区 (中森明菜)
  7. mysql 存储emoji表情
  8. CLTC NEDC WLTC工况,到底谁更准?
  9. Winform 中设置TextBox获取焦点和全选
  10. (P32-P33)异常处理:Python标准异常总结,异常处理,raise