当前位置: 首页 > news >正文

一个高效的go语言字符串转驼峰命名算法实现函数

在go语言的开发中我们经常需要对各种命名进行规范, 今天给大家介绍的是一个高效的将字符串转 驼峰命名 (即 首字母大写的命名方式)的函数。


// 字符串转驼峰命名
// @author tekintian <tekintian@gmail.com>
func CamelStr(str string) string {// 如果有 - 链接,统一将其替换为 _if strings.IndexByte(str, '-') != -1 {str = strings.Replace(str, "-", "_", -1)}//按下划线切割字符串为单词tmp := strings.Split(str, "_")for i, w := range tmp {// 判断第一个单词字母是否为小写字母if w[0] >='a' && w[0] <='z' {// 这个地方的 w[0]-32 即将单词的第一个字母转换为大写.// 利用ascii码值差来转换, 小写字母的ascii码值比大写字母的ascii码值大32tmp[i] = fmt.Sprintf("%v%v", string(w[0]-32), string(w[1:]))}// 单词首字母非大写字母的情况不需要处理}return strings.Join(tmp, "") // 将切片拼接为字符串后返回
}


   另外给大家看一个效率较低,且代码冗长的一个字符串转驼峰命名函数, 看看你能找出多少个效率低下和不规范的地方?

// 驼峰命名  问题代码
func CamelStrX(s string) string {data := make([]byte, 0, len(s))j := falsek := falsenum := len(s) - 1for i := 0; i <= num; i++ {d := s[i]if k == false && d >= 'A' && d <= 'Z' {k = true}if d >= 'a' && d <= 'z' && (j || k == false) {d = d - 32j = falsek = true}if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {j = truecontinue}data = append(data, d)}return string(data)
}

怎么样,你能看出上面代码中有多少个问题吗?  如果是你你会如何做呢?

http://www.lryc.cn/news/364590.html

相关文章:

  • Python中__init__方法的魔力:构建对象的基石
  • Appium安装及配置(Windows环境)
  • CANOE制造dll文件,以及应用dll文件
  • C++结合OpenCV进行图像处理与分类
  • Master-Worker 架构的灰度发布难题
  • 钢基础知识介绍
  • linux 系统监控脚本
  • K8s Pod的QoS类
  • TCP/IP协议栈
  • Vector容器详解
  • 设计模式-抽象工厂(创建型)
  • 攻防世界---web---Web_php_unserialize
  • 嵌入式学习记录
  • 使用from…import语句导入模块
  • idea mac快捷键
  • Day1——一些感想,学习计划和自我激励(不重要,跳过吧)
  • 网络安全渗透工具汇总
  • JavaScript 学习笔记 总结
  • 分布式架构与分布式理论
  • Qt——前言
  • RN:Error: /xxx/android/gradlew exited with non-zero code: 1
  • 今日科普:了解、预防、控制高血压
  • Spark关于 ExpressionEncoder[T] 以及 RowEncoder 以及Spark怎么做外部数据和内部数据的转换
  • D-Day 上海站回顾丨以科技赋能量化机构业务
  • 业财一体化的重点、难点和模式
  • gorse修改开源项目后,如何使用Docker compose发布
  • Bowyer-Watson算法
  • 计算机基础之:fork进程与COW机制
  • 47.各种类型的线程池
  • 多目标优化-NSGA-II