【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
我们在第三行看到了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的编码表之后我们发现了一个规律,那就是十进制编码时,大小写编码之间相差了32,十六进制相差了20。既然我们知道了rune能获取字符的Unicode编码值,又知道了大小写字母的编码规律,接下来用他们做字母大写的变化就非常容易了。
更多 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
【Golang】字符串首字母大小写转化的更多相关文章
- PHP将字符串首字母大小写转换
每个单词的首字母转换为大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = ...
- 使用fastJson把对象转字符串首字母大小写问题的解决
例如:文档中要求传输的字段为 但是转成json字符串后却变成了: 解决方式: 在实体类的get方法上添加@JSONField(name = " ") 注解后问题解决: 输出:
- php字符串首字母转换大小写的实例分享
php中对字符串首字母进行大小写转换的例子. in: 后端程序首字母变大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo) ...
- java string 首字母大小写方法
String字符串需要进行首字母大小写改写,查询google,就是将首字母截取,转化大小写 + 首字母后面字符串 //首字母小写 public static String captureName(St ...
- ASP.NET Core中返回 json 数据首字母大小写问题
ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...
- php 中文字符串首字母的获取函数
这篇文章介绍了php 中文字符串首字母的获取函数,有需要的朋友可以参考一下 function chineseFirst($str) { $str= iconv("UTF-8",&q ...
- ms sql 获取字符串首字母
很久没有编写新文章,现在发布一篇自定义函数,针对于ms sql数据库中需要获取字符串首字母,对于需要的朋友希望对你有用,如果你有更好的方法也可以给我留言.函数如下: --获取字符串首字母 CREATE ...
- [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of p ...
- sql 获取字符串首字母,循环
//字符串首字母 CREATE FUNCTION GetInitialLetter(@ChineseString NVARCHAR()) RETURNS NVARCHAR() AS BEGIN DEC ...
随机推荐
- C#读取Excel,Access数据库
出自:http://blog.csdn.net/limpire/article/details/2599760 使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2 ...
- A7架构
以Cortex-A7 MPCore processor来进行说明,这是一款主打低功耗的多核处理器,采用ARMv7-A架构,最多支持4个core. 每个core都有L1级的Cache,分为instruc ...
- redis和memcached相关
应该选择哪一种缓存机制 redis相较于memcached更加年轻,功能更加强大. 对小型静态数据进行缓存处理,最具代表性的例子就是HTML代码片段.使用memcached所消耗内存更少. 其他情况下 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON BitXor
zw版[转发·台湾nvp系列Delphi例程]HALCON BitXor procedure TForm1.Button1Click(Sender: TObject);var image0, imag ...
- firefox历史版本下载链接
http://ftp.mozilla.org/pub/firefox/releases firefox版本42以上的用不了firebug,需要装版本42以下的,否则用不了
- python之路----线程
线程概念的引入背景 进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...
- MySQL-MHA集群部署(binlog复制)
MHA的理论知识网上有很多教程,这里不会说明:仅推荐博客链接! MHA的理论说明:http://www.ywnds.com/?p=8094 MHA的安装包需要在google上面下载,或者就是csdn上 ...
- # 20145106 《Java程序设计》第6周学习总结
教材学习内容总结 来源和目的都不知道的情况下还是可以撰写程序的,有这类需求的时候,可以设计一个通用的dump()方法.dump方法接受inputstream与outputstream实例,分别代表读取 ...
- 20145305 《网络对抗》Web基础
实践过程及结果截图 Apache 简单的网页编写 javascript相关 PHP测试 MySQL基础 php+mysql 登录成功信息: 登录失败信息: SQL注入 XSS攻击 基础问题回答 (1) ...
- 20145315《网络对抗》——注入shellcode以及 Return-to-libc攻击实验
shellcode 准备一段Shellcode 我用的老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3 ...