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

在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码值大32
			tmp[i] = fmt.Sprintf("%v%v", string(w[0]-32), string(w[1:]))
		}
		// 单词首字母非大写字母的情况不需要处理
	}
	return strings.Join(tmp, "") // 将切片拼接为字符串后返回
}

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

Go 复制代码
// 驼峰命名  问题代码
func CamelStrX(s string) string {
    data := make([]byte, 0, len(s))
    j := false
    k := false
    num := len(s) - 1
    for 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 - 32
            j = false
            k = true
        }
        if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {
            j = true
            continue
        }
        data = append(data, d)
    }
    return string(data)
}

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

相关推荐
sheeta199815 小时前
LeetCode 每日一题笔记 日期:2025.11.24 题目:1018. 可被5整除的二进制前缀
笔记·算法·leetcode
gfdhy21 小时前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
百***060121 小时前
SpringMVC 请求参数接收
前端·javascript·算法
一个不知名程序员www1 天前
算法学习入门---vector(C++)
c++·算法
云飞云共享云桌面1 天前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张1 天前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
橘颂TA1 天前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
xxxxxxllllllshi1 天前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L1 天前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先
铁手飞鹰1 天前
二叉树(C语言,手撕)
c语言·数据结构·算法·二叉树·深度优先·广度优先