一、ASCII 介绍
英语的字母大小写转化,是我们常遇到的字符串处理情况。
如上表,是ASCII的128个字符。
英语字母,需要转化的是 A-Z以及a-z
二、go中处理字符串 转化小写
转化小写的思路是,只要在遍历字符,只要在 A-Z,就转化a-z
而他们之间相差一个 'a'-'A'的大小。
小写比大写大 'a'-'A'的大小。
func ToLower(s string) string {
b := strings.Builder{}
b.Grow(len(s))
for i := 0; i < len(s); i++ {
c := s[i]
if 'A' <= c && c <= 'Z' {
c += 'a' - 'A'
}
b.WriteByte(c)
}
return b.String()
}
测试函数:
import "testing"
func TestToLower(t *testing.T) {
type args struct {
s string
}
tests := []struct {
name string
args args
want string
}{
{"1", args{s: "A"}, "a"},
{"1", args{s: "Aa"}, "aa"},
{"1", args{s: "Aa0"}, "aa0"},
{"1", args{s: ")A_$"}, ")a_$"},
{"1", args{s: "0000"}, "0000"},
{"1", args{s: "哈哈a"}, "哈哈a"},
{"1", args{s: "哈哈A啊啊"}, "哈哈a啊啊"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := ToLower(tt.args.s); got != tt.want {
t.Errorf("ToLower() = %v, want %v", got, tt.want)
}
})
}
}
三、go中处理字符串 转化大写
转化小写的思路是,只要在遍历字符,只要在 a-z,就转化A-Z
而他们之间相差一个 'a'-'A'的大小。
大写比小写,小一个 'a'-'A'的大小。
func ToUpper(s string) string {
b := strings.Builder{}
b.Grow(len(s))
for i := 0; i < len(s); i++ {
c := s[i]
if 'a' <= c && c <= 'z' {
c -= 'a' - 'A'
}
b.WriteByte(c)
}
return b.String()
}
测试函数:
func TestToUpper(t *testing.T) {
type args struct {
s string
}
tests := []struct {
name string
args args
want string
}{
{"1", args{s: "a"}, "A"},
{"1", args{s: "Aa"}, "AA"},
{"1", args{s: "Aa0"}, "AA0"},
{"1", args{s: ")a_$"}, ")A_$"},
{"1", args{s: "0000"}, "0000"},
{"1", args{s: "哈哈a"}, "哈哈A"},
{"1", args{s: "哈哈A啊啊"}, "哈哈A啊啊"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := ToUpper(tt.args.s); got != tt.want {
t.Errorf("ToUpper() = %v, want %v", got, tt.want)
}
})
}
}
补充阅读:https://icode.best/i/79307349...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。