【Golang】字符串首字母大小写转化
写在前面 在自动化过程中,我们用得最多的可能就是字符串的处理,熟悉Python的都知道在Python中要让一个字符串的首字母大写直接用capitalize
就可以了,但是同样的事情在Golang中没有这么简单,今天我们一起来学习用golang实现字符串首字母大写。
# Python实现首字母大写
print("abcd".capitalize())# 输出Abcd
实现首字母大写 我们先来一起来看一下完整的代码,后面会对其中的一些内容进行分解。
示例代码
// Capitalize 字符首字母大写
func Capitalize(str string) string {
var upperStr string
vv := []rune(str)// 后文有介绍
for i := 0;
i < len(vv);
i++ {
if i == 0 {
if vv[i] >= 97 && vv[i] <= 122 {// 后文有介绍
vv[i] -= 32 // string的码表相差32位
upperStr += string(vv[i])
} else {
fmt.Println("Not begins with lowercase letter,")
return str
}
} else {
upperStr += string(vv[i])
}
}
return upperStr
}
rune 【【Golang】字符串首字母大小写转化】我们在第三行看到了
rune
这个关键字,那么rune是什么呢?rune在golang中是int32的别名,在各个方面都与int32相同。通常被用来区分字符值和整数值。 我们可以通过做几个小测试来理解它。s := "hello你好"
fmt.Println(len(s))// 输出长度为11
fmt.Println(len([]rune(s))) // 输出长度为7
s = "你好"
fmt.Println(len(s))// 输出长度为6
fmt.Println(len([]rune(s))) // 输出长度为2
s = "你"
fmt.Println([]byte(s)) // 输出长度为6
fmt.Println(rune('你')) // 输出20320
通过上述代码可以将rune理解为一个可以表示unicode 编码的值int 的值,称为码点(code point)。只不过go语言把这个码点抽象为rune。
想要更深入的了解可以查看这个博客:https://blog.golang.org/strings ,讲述了 Strings, bytes, runes and characters in Go。
在了解了rune可以表示为unicode 编码的值int 的值之后,我们来了解一下unicode 编码值。
unicode编码表 一起来看一下Unicode的编码表
字符 | 十进制编码值 | 十六进制编码值 |
---|---|---|
A | 65 | 41 |
B | 66 | 42 |
C | 67 | 43 |
D | 68 | 44 |
... | ... | ... |
a | 97 | 61 |
b | 98 | 62 |
c | 99 | 63 |
d | 100 | 64 |
... | ... | ... |
更多 Unicode的编码可以参考 https://blog.csdn.net/fedawn/article/details/7307993
Unicode库常见用法 其实我们上面的代码中的第六行有一种更简单的方法,那就是标准库
unicode
的IsLower()
方法,unicode库还有很多其他类似的方法:unicode.IsUpper(r) // 是否大写
unicode.IsLetter(r) // 是否字母
unicode.IsSpace(r)// 是否空格
unicode.IsTitle(r) // 是否特殊字符
unicode.IsDigit(r) //是否数字
...
文章图片
更多的用法可以参考 https://blog.csdn.net/chenbaoke/article/details/40318215
简单应用:判断首字母是否大写
func IsStartUpper(s string) bool {
return unicode.IsUpper([]rune(s)[0])
}
参考资料:
https://blog.golang.org/strings
https://blog.csdn.net/a41888313/article/details/78946911
https://blog.csdn.net/fedawn/article/details/7307993
https://blog.csdn.net/yang8023tao/article/details/53332827
转载于:https://www.cnblogs.com/Detector/p/9686443.html
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长