后厂村海盗资料

本文主要介绍后厂村海盗资料 方法和在新技术下所面对的“挑战”,方便大家深入理解后厂村海盗资料 过程。本文也将分享后厂村海盗资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。

目录
  • 简介
  • UTF-8字符
  • 字符串的常用操作

简介

字符串在各种编程语言中都是很基础的一种类型,在Go中字符串简单理解就是一个数组,数组里面的元素是byte类型。因此基本上拥有类似数组的全部特性。例如len可以返回字符串的字节数,注意不是字符的长度:

s := "go" fmt.Println(len(s)) //2 

也可以根据下标访问该位置的字节

s := "go" fmt.Println(s[0]) //103 字符g的ASCII码 

字符串也可以类似切片的操作,取其给定范围内的字符串,生成一个新的字符

s := "hello world" fmt.Println(s[0:5]) // "hello"  fmt.Println(s[:5]) // "hello" fmt.Println(s[:]) // "hello world" 

也可以用+操作符,把两个字符串连接成一个新的字符串

s := "hello" w := "world"  s = s + w //"hello world" 

刚开始的时候我们说过,字符串是不可变,这段代码中最后的s是一段新的字符串。而不是在开始s基础上修改的。同时先要做类似数组那样修改元素的值也是不可以的

s := "hello" s[1] = 't' //编译时会报错 

UTF-8字符

UTF-8UNICODE的一种变长度的编码表达方式,我们都知道ASCII编码是1个字节,但是这也限制了它只能代表128个字符,无非对其它语言的字符进行编码。如果把所有的字符都用统一用32位表示,的确比较简单,但是这样会浪费很多空间,而且历史上的ASCII编码的字符也无兼容。UTF-8采用1-4个字节表示字符,ASCII还是只用1个字节,保持兼容。如果第一个字节的是110开头,则需要2个字节。1110开头则需要3个字节,11110开头则是4个字节。

0xxxxxxx                             runes 0-127    (ASCII) 110xxxxx 10xxxxxx                    128-2047       (values <128 unused) 1110xxxx 10xxxxxx 10xxxxxx           2048-65535     (values <2048 unused) 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  65536-0x10ffff (other values unused) 

Gostring就是采用UTF-8编码,因此无法直接通过下标i直接访问第i个字符,比如:

s := "你好世界"  fmt.Println(len(s)) //15 

上面这段代码运行返回长度是12,如果想要知道有多少个字符可以利用unicode/utf8提供的功能来获取:

package main  import ( 	"fmt" 	"unicode/utf8" )  func main() { 	s := "你好世界!" 	fmt.Println(len(s)) //15 	fmt.Println(utf8.RuneCountInString(s)) //5 } 

想要分割成单个字符输出可以通过for range:

func main() { 	s := "你好世界!" 	for i, r := range s { 		fmt.Printf("%dt%qt%dn", i, r, r) 	} }  //返回 0       '你'    20320 3       '好'    22909 6       '世'    19990 9       '界'    30028 12      '!'    65281 

这次遍历都是单个字符的遍历,而不是单个字节。

字符串的常用操作

Go 的标准库提供了丰富的工具,对字符串进行操作,下面简单介绍下常见的操作:

package main  import ( 	"fmt" 	"strings" )  func main() { 	s := "hello" 	fmt.Println(strings.Contains(s, "he"))         //true 是否包含子字符串 	fmt.Println(strings.Replace(s, "he", "eh", 1)) // ehllo 替换第一个          bytes := []byte(s) //转化为byte数组 	s2 := string(bytes)//byte数组转化为字符串 	fmt.Println(s2) } 

字符串和数字之间的转化也是经常用到的,strconv里面提供的丰富的功能让它们互相转化

import ( 	"fmt" 	"strconv" )  func main() { 	s := "123" 	i, _:= strconv.Atoi(s) //字符串转化为数字 	fmt.Println(i+2) //125  	x := 123 	var a string = strconv.Itoa(x) //数字转化为字符串 	fmt.Println(a) //123 } 

如果想要动态的增加字符串Go提供了Buffer类型可以动态的增加字符:

package main  import ( 	"fmt" 	"bytes" )  func main() { 	var buf bytes.Buffer 	buf.WriteString("s")  	fmt.Println(buf.String()) //s  	buf.WriteByte('A') 	fmt.Println(buf.String()) //sA } 

后厂村海盗资料部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 后厂村海盗资料

提供最优质的资源集合

立即查看 了解详情