一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
Go学习打卡Day07 字符串
1、strconv包
strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itoa()、parse系列、format系列、append系列。
Atoi()函数用于将字符串类型的整数转换为int类型,函数签名如下:
func Atoi(s string) (i int, err error)
Itoa()函数用于将int类型数据转换为对应的字符串表示,具体的函数签名如下:
func Itoa(i int) string
package main
import (
"fmt"
"strconv"
)
func main() {
s1 := "123"
i1, err := strconv.Atoi(s1)
if err != nil {
fmt.Println("s1 can not convert to int")
} else {
fmt.Printf("%T, %v\n", i1, i1)
}
i2 := 123
s2 := strconv.Itoa(i2)
fmt.Printf("%T , %v", s2, s2)
}
2、Parse系列函数
func ParseBool(str string) (value bool, err error)
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func ParseFloat(s string, bitSize int) (f float64, err error)
Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
-
ParseBool()- 返回字符串表示的bool值。它接受`1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。
-
ParseInt()- 返回字符串表示的整数值,接受正负号。
- base指定进制(2到36),如果base为0,则会从字符串前置判断,”0x”是16进制,”0”是8进制,否则是10进制;
- bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64;
- 返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange。
-
ParseUnit()ParseUint类似ParseInt但不接受正负号,用于无符号整型。
-
ParseFloat()- 解析一个表示浮点数的字符串并返回其值。
- 如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。
- bitSize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64;
- 返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。
3、Format系列函数
func FormatBool(b bool) string
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
4、append系列函数
append系列:转化为字符串后追加到字节
package main
import (
"fmt"
"strconv"
)
func main() {
s1 := make([]byte, 0, 1024)
s1 = strconv.AppendBool(s1, true)
s1 = strconv.AppendInt(s1, 123, 10)
s1 = strconv.AppendQuote(s1, "go")
fmt.Println("s1 =", s1)
fmt.Println("s1 =", string(s1))
}
//s1 = [116 114 117 101 49 50 51 34 103 111 34]
//s1 = true123"go"
5、GO语言中常用字符串处理内置函数
| len(str) | 返回参数的具体长度 |
|---|---|
| runes := []rune(str) | string 转 []rune |
| str = strconv.Itoa(123) | 将整数转换为字符串 |
| n,err := strconv.Atoi("123") | 将字符串转换为int |
| bytes := []byte("hello") | 字符串转byte |
| str = string([]byte{1,2,3}) | byte转字符串 |
| strconv.FotmatInt(123,base) | 10进制转2,8,16进制,第二个参数指定进制数 |
| strings.Contains("abcde","abc") | 查找字符串中是否存在指定的值 |
| strings.Count("acbeaaa","a") | 统计字符串中有几个指定的值 |
| strings.EqualFold("abc","Abc") | 不区分大小写比较字符串,==比较默认区分大小写 |
| strings.Index("ABC_abc_abc","abc") | 返回字符串中第一次出现的指定的值的位置,没找到则返回-1 |
| strings.LastIndex("ABC_abc_abc","abc") | 返回字符串中最后一次出现的指定的值的位置,没找到则返回-1 |
| strings.Replace("go go hello","go","golang",n) | 将字符串中指定的值替换成另一个值,n可以指定替换几个,-1表示全部替换 |
| strings.Split("hello world love",",") | 按照指定的值将字符串分割成数组 |
| strings.ToLower("Go") | 将字符串的字母进行大小写转换并返回一个新的处理后的字符串 |
| strings.ToUpper("go") | 将字符串的字母进行大小写转换并返回一个新的处理后的字符串 |
| strings.TrimSpace(" xyz ") | 去除字符串左右最两边的空格并返回一个新的处理后的字符串 |
| strings.Trim("12hello21","12") | 去除字符串左右最两边指定的值并返回一个新的处理后的字符串 |
| strings.TrimLeft("12hello21","12") | 去除字符串最左边的指定的值 |
| strings.TrimRIght("12hello21","12") | 去除字符串最右边的指定的值 |
| strings.HasPrefix("xyzw","xy") | 判断字符串是否以指定的值开头 |
| strings.HasSuffix("abcxyz","xyz") | 判断字符串是否以指定的值结束 |
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
str := "你好" //一个汉字三个字节
fmt.Println("str len = ", len(str))
str1 := "你好hello world"
str2 := []rune(str1) //遍历含有中文的字符串,需要用切片 r := []rune(str)
for i := 0; i < len(str2); i++ {
fmt.Printf("char = %c\n", str2[i])
}
n, err := strconv.Atoi("123")
if err != nil {
fmt.Println("convert error:", err)
} else {
fmt.Println("n = ", n)
}
str3 := strconv.Itoa(123)
fmt.Printf("str3 = %v,str3 = %T \n", str3, str3)
var bytes = []byte("hello go")
fmt.Printf("byte %v\n", bytes)
str4 := string([]byte{97, 98, 99})
fmt.Printf("str4 %v\n", str4)
str = strconv.FormatInt(123, 2)
fmt.Printf("str bin %v\n", str)
str = strconv.FormatInt(123, 16)
fmt.Printf("str hex %v\n", str)
is_check := strings.Contains("hello", "he")
fmt.Printf("check is %v \n", is_check)
num := strings.Count("hello", "l")
fmt.Printf("counter is : %v \n", num)
b := strings.EqualFold("abc", "ABC") // strings.EqualFold 不区分大小写
fmt.Println("strings.EqualFold check is ", b)
fmt.Println("abc" == "Abc") // == 区分大小写
index := strings.Index("this is an apple", "is")
fmt.Println("index is ", index)
index = strings.LastIndex("this is an apple", "xyz")
fmt.Println("index is ", index)
str = strings.Replace("go go hello", "go", "hi", -1) // -1则全部替换
fmt.Println("After replace:", str)
strArr := strings.Split("Tom,go,to,school", ",")
fmt.Printf("strArr %v\n", strArr)
str = "Go go"
str = strings.ToLower(str)
fmt.Printf("str ToLower is: %v\n", str)
str = strings.ToUpper(str)
fmt.Printf("str ToUpper is: %v\n", str)
str = " Go go "
str = strings.TrimSpace(str)
fmt.Printf("str TrimSpace is %v\n", str)
str = "** ++Go **go Go ++GO **"
str = strings.Trim(str, " **++")
fmt.Printf("str Trim is %v\n", str)
str = "** ++Go **go Go ++GO **"
str = strings.TrimLeft(str, " **++")
fmt.Printf("str Trim is %v\n", str)
str = "** ++Go **go Go ++GO **"
str = strings.TrimRight(str, " **++")
fmt.Printf("str Trim is %v\n", str)
str = "http://192.168.1.1"
fmt.Println("begin has ", strings.HasPrefix(str, "http"))
str = "P0001.jpg"
fmt.Println("end has ", strings.HasSuffix(str, "jpg"))
}
/*
str len = 6
char = 你
char = 好
char = h
char = e
char = l
char = l
char = o
char =
char = w
char = o
char = r
char = l
char = d
n = 123
str3 = 123,str3 = string
byte [104 101 108 108 111 32 103 111]
str4 abc
str bin 1111011
str hex 7b
check is true
counter is : 2
strings.EqualFold check is true
false
index is 2
index is -1
After replace: hi hi hello
strArr [Tom go to school]
str ToLower is: go go
str ToUpper is: GO GO
str TrimSpace is Go go
str Trim is Go **go Go ++GO
str Trim is Go **go Go ++GO **
str Trim is ** ++Go **go Go ++GO
begin has true
end has true
*/