把一个字符串中的字符从小写转为大写

Bryce · · 1767 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

将字符串里面的英文小写转成大写,是一个很简单的操作。每个字符的编码可以认为是整数,Golang里面的byteruneuint8int32。其它语言大同小异。在编码表当中,位置是是从AZ,接着是azA对应的整数是65,a对应的整数是97,中间差了26个英文字母和6个其它字符的长度共32。所以转换的方法就是,将小写字母的值,剪掉32即可。

还是编码的问题。最早的出现的编码是ASCII,从128个增加到256个字符。再到后面的Unicode、GBK等,这些新出的编码和最早的ASCII都是兼容的,也就是说,不同的编码里面,前256位都是一样的。所以,在这里的英文字符转大写问题,不存在编码问题。

这个题目在Golang的strings包里有专门的实现ToUpper,此函数内部封装了unicode包,在此包的letter.go文件内,是具体的实现。

const MaxASCII = '\u007F'

func toUpper(r rune) rune {
	if r <= MaxASCII {
		if 'a' <= r && r <= 'z' {
			r -= 'a' - 'A'
		}
		return r
	}
	return r
}

func ToUpper(s []rune) (res []rune) {
	for i := 0; i < len(s); i++ {
		res = append(res, toUpper(s[i]))
	}
	return res
}

func main() {
	a := "Hello, 世界"
	fmt.Println(string(ToUpper([]rune(a))))

}

大Golang支持UTF8和Unicode两种编码方式。分别对应的数据类型是byterune。通过[]byte(str)[]rune(str)可以将字符串转成UTF8和UTF16两种解析方式。解析的字符串可能是中文,所以要按照rune处理。对于中文等其他字符,不做处理,所以增加了if r <= MaxASCII过滤。

还有要注意的一点,Golang语言层面实现了字符串string。它不同于C语言里面的字符数组,所以不能够通过下标修改字符串内容。只能通过下标读取。

本文所涉及到的完整源码请参考


######参考文献 + 【1】Source file src/pkg/strings/strings.go - The Go Programming Language + 【2】ASCII - Wikipedia + 【3】Source file src/pkg/unicode/letter.go - The Go Programming Language

原文链接:把一个字符串中的字符从小写转为大写,转载请注明来源!


有疑问加站长微信联系(非本文作者)

本文来自:Cyeam

感谢作者:Bryce

查看原文:把一个字符串中的字符从小写转为大写

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

1767 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传