一个高效的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)
}

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

相关推荐
a187927218316 分钟前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx32 分钟前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_307779131 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐2 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归
charliejohn2 小时前
计算机考研 408 数据结构 堆的插入与删除 堆排序
算法
老鱼说AI2 小时前
从点积到希尔伯特空间:向量内积的几何本质与大模型相似度度量
人工智能·深度学习·线性代数·算法·机器学习·数学建模
地平线开发者3 小时前
模型部署|如何解决算子约束
深度学习·算法·自动驾驶
Navigator_Z4 小时前
LeetCode //C - 1254. Number of Closed Islands
c语言·算法·leetcode
deepseek234 小时前
GPT-6 Astra 破解 FrontierMath 九年悬案拆解:调和熵投票规则反证核恒非空,局部搜索如何终结反例悬赏
人工智能·算法·ai agent
syagain_zsx4 小时前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和