写在前面

在自动化过程中,我们用得最多的可能就是字符串的处理,熟悉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库常见用法

其实我们上面的代码中的第六行有一种更简单的方法,那就是标准库unicodeIsLower()方法,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】字符串首字母大小写转化的更多相关文章

  1. PHP将字符串首字母大小写转换

    每个单词的首字母转换为大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = ...

  2. 使用fastJson把对象转字符串首字母大小写问题的解决

    例如:文档中要求传输的字段为 但是转成json字符串后却变成了: 解决方式: 在实体类的get方法上添加@JSONField(name = " ") 注解后问题解决: 输出:

  3. php字符串首字母转换大小写的实例分享

    php中对字符串首字母进行大小写转换的例子. in: 后端程序首字母变大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo) ...

  4. java string 首字母大小写方法

    String字符串需要进行首字母大小写改写,查询google,就是将首字母截取,转化大小写 + 首字母后面字符串 //首字母小写 public static String captureName(St ...

  5. ASP.NET Core中返回 json 数据首字母大小写问题

    ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...

  6. php 中文字符串首字母的获取函数

    这篇文章介绍了php 中文字符串首字母的获取函数,有需要的朋友可以参考一下 function chineseFirst($str) { $str= iconv("UTF-8",&q ...

  7. ms sql 获取字符串首字母

    很久没有编写新文章,现在发布一篇自定义函数,针对于ms sql数据库中需要获取字符串首字母,对于需要的朋友希望对你有用,如果你有更好的方法也可以给我留言.函数如下: --获取字符串首字母 CREATE ...

  8. [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分

    init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of p ...

  9. sql 获取字符串首字母,循环

    //字符串首字母 CREATE FUNCTION GetInitialLetter(@ChineseString NVARCHAR()) RETURNS NVARCHAR() AS BEGIN DEC ...

随机推荐

  1. OBV_X3

    {OBV_X3[背景]考虑到OBV_X03在情况1的时候,采用的是寻找波段线的同价K线,但是由于此种情况下必须使用CONST(C)或通过输入参数CONSTCC设定固定值,无法当前K线的CLOSE同时变 ...

  2. MySQL从删库到跑路(四)——MySQL数据库创建实例

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.创建数据库 1.创建数据库 创建数据库,指定数据库的默认字符集为utf8.create database sch ...

  3. 好用的在线web页面测试,移动页面测试工具webpagetest使用图文教程

    好用的在线web页面测试,移动页面测试工具webpagetest使用图文教程 http://www.webpagetest.org/ 1.打开主页,输入网址,点击 START TEST 按钮开始测试 ...

  4. 组合类C++

    C++中类的组合 ※组合的概念 ×类中的成员是另一个类的对象. ×可以在已有的抽象的基础上实现更加复杂的抽象. 通过对复杂对象进行分解.抽象,使我们能够将一个复杂对象 理解为简单对象的组合. 分解得到 ...

  5. htpasswd命令的使用

    htpasswd的基本用法 htpasswd是Apache服务器中生成用户认证的一个工具,仅说明htpasswd的用法: htpasswd参数 -c 创建passwdfile.如果passwdfile ...

  6. Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则

    时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...

  7. 一种新的技术,C++/CLI

    一.来源 在一个项目中,拿到了一个demo,看起来像是C#,又像是C++,部分截图如下 1.界面[C#的winform] 2.mian入口,是cpp 3.解决方案 二.猜测 一开始以为是C#工程,因为 ...

  8. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. Python3基础 str swapcase 英文字母大小写反转

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. C++写入mbr

    #include <windows.h> #include <winioctl.h> unsigned char scode[] = "\xb8\x12\x00\xc ...