zoukankan      html  css  js  c++  java
  • 【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库常见用法

    其实我们上面的代码中的第六行有一种更简单的方法,那就是标准库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

  • 相关阅读:
    Eclipse连接MySQL数据库(傻瓜篇)
    JMeter监控内存及CPU ——plugin插件监控被测系统资源方法
    fiddler抓取手机端的数据流量包
    python 字典(dictionary)一些方法
    python 循环语句
    Charles 抓 HTTPS 包
    python RSA 加密与签名
    从零开始做一个Jmeter性能测试
    [python之路]变量和字符编码
    [python之路]简单介绍
  • 原文地址:https://www.cnblogs.com/Detector/p/9686443.html
Copyright © 2011-2022 走看看