做jsp网站用哪些软件,网站兼容浏览器,网站建设公司首选华网天下,旅游网站建设的相关报价在 Go 语言编程中#xff0c;字符串是最基本、最常用的数据类型之一。无论是处理用户输入、读取文件内容#xff0c;还是生成输出#xff0c;字符串操作无处不在。为了方便开发者对字符串进行各种操作#xff0c;Go 语言提供了强大的 strings 包和 strconv 包。strings 包包… 在 Go 语言编程中字符串是最基本、最常用的数据类型之一。无论是处理用户输入、读取文件内容还是生成输出字符串操作无处不在。为了方便开发者对字符串进行各种操作Go 语言提供了强大的 strings 包和 strconv 包。strings 包包含了一系列函数用于处理和操作字符串如查找、替换、分割、拼接等。strconv 包则专注于字符串与其他基本数据类型之间的转换使得数据处理更加简洁高效。在这篇文章中我们将深入探讨 Go 语言中的字符串处理方法并详细介绍 strings 包和 strconv 包的主要功能和用法帮助您更好地掌握字符串操作技巧提高编程效率。 文章目录 1、Go 语言中的字符串1.1、GO 语言1.2、字符串字面值1.3、字符串比较和操作1.4、字符串拼接1.5、字符串的其他操作1.6、示例统计字节和字符 2、strings 和 strconv 包2.1、strings 包2.1.1、前缀和后缀2.1.2、字符串包含关系2.1.3、判断子字符串或字符在父字符串中出现的位置索引2.1.4、字符串替换2.1.5、统计字符串出现次数2.1.6、重复字符串2.1.7、修改字符串大小写2.1.8、修剪字符串2.1.9、分割字符串2.1.10、拼接 slice 到字符串2.1.11、从字符串中读取内容 2.2、strconv 包2.2.1、将其他类型转换为字符串2.2.2、将字符串转换为其他类型 1、Go 语言中的字符串
1.1、GO 语言
在 Go 语言中字符串是 UTF-8 编码字符的序列。对于 ASCII 字符每个字符占用 1 个字节而其他字符根据需要占用 2 至 4 个字节。UTF-8 是一种广泛使用的编码格式许多标准文本文件如 XML 和 JSON都采用这种编码。由于 UTF-8 编码的可变长度特性Go 语言中的字符串也可能占用 1 到 4 个字节这与 C、Java 或 Python 不同例如Java 始终使用 2 个字节。这种设计不仅减少了内存和硬盘空间的占用还免去了对 UTF-8 文本进行编码和解码的繁琐操作。
字符串在 Go 中是一种值类型且值不可变。这意味着一旦创建了字符串就不能修改其内容。更深入地讲字符串是字节的定长数组。
1.2、字符串字面值
Go 支持两种形式的字符串字面值
解释字符串Interpreted Strings
使用双引号括起来。转义字符会被替换例如\n 表示换行符\t 表示制表符\u 或 \U 表示 Unicode 字符\\ 表示反斜杠本身。
示例
var str Hello, World!\n非解释字符串Raw Strings
使用反引号括起来。支持多行字符串转义字符不会被替换所有内容都会原样输出。
示例
var rawStr This is a raw string \n在 Go 中字符串是通过长度来限定的而不是像 C/C 那样通过特殊字符 \0 结束。string 类型的零值是长度为零的字符串即空字符串 。
1.3、字符串比较和操作
字符串可以通过常见的比较运算符、!、、、、按字节在内存中进行比较。可以使用 len() 函数获取字符串的字节长度
len(hello) // 5字符串的内容字节可以通过索引访问索引从 0 开始
var str hello
str[0] // h
str[len(str)-1] // o需要注意的是这种索引方式只对纯 ASCII 字符串有效。对于 Unicode 字符需要使用 unicode/utf8 包提供的方法。
1.4、字符串拼接
字符串可以使用 运算符拼接
var s1 hello
var s2 world
var s s1 s2 // hello world也可以使用 运算符进行拼接
var s hello
s ,
s world! // hello, world!在循环中使用 进行字符串拼接并不是最高效的方法。更好的方法是使用 strings.Join() 函数或者使用 bytes.Buffer 进行高效的字符串拼接。
1.5、字符串的其他操作
在 Go 语言中可以将字符串视为字节byte的切片slice从而实现标准索引操作。使用 for 循环可以根据索引返回字符串中的字节。而使用 for-range 循环可以对 Unicode 字符串进行迭代操作。
此外Go 语言提供了丰富的字符串操作函数和方法可以在标准库的 strings 和 unicode/utf8 包中找到。例如可以使用 fmt.Sprint(x) 来格式化生成并返回字符串。
1.6、示例统计字节和字符
创建一个程序用于统计字符串中的字节和字符数量。例如分析字符串 asSASA ddd dsjkdsjs dk 和 asSASA ddd dsjkdsjsこん dk并解释两者不同的原因提示使用 unicode/utf8 包。
示例代码
package mainimport (fmtunicode/utf8
)func main() {str1 : asSASA ddd dsjkdsjs dkstr2 : asSASA ddd dsjkdsjsこん dkfmt.Printf(String: %s\n, str1)fmt.Printf(Bytes: %d, Runes: %d\n, len(str1), utf8.RuneCountInString(str1))fmt.Printf(String: %s\n, str2)fmt.Printf(Bytes: %d, Runes: %d\n, len(str2), utf8.RuneCountInString(str2))
}该程序统计并输出字符串的字节数和字符rune数从而展示 UTF-8 编码在处理不同字符时的差异。 2、strings 和 strconv 包
在 Go 语言中字符串作为一种基本数据结构有许多预定义的处理函数。strings 包用于对字符串进行主要操作而 strconv 包用于字符串与其他类型之间的转换。
2.1、strings 包
strings 包提供了丰富的字符串操作函数以下是一些常用操作
2.1.1、前缀和后缀
strings.HasPrefix(s, prefix string) bool判断字符串 s 是否以 prefix 开头。strings.HasSuffix(s, suffix string) bool判断字符串 s 是否以 suffix 结尾。
示例
package mainimport (fmtstrings
)func main() {str : This is an example of a stringfmt.Printf(T/F? Does the string \%s\ have prefix %s? , str, Th)fmt.Printf(%t\n, strings.HasPrefix(str, Th))
}输出
T/F? Does the string This is an example of a string have prefix Th? true2.1.2、字符串包含关系
strings.Contains(s, substr string) bool判断字符串 s 是否包含子字符串 substr。
2.1.3、判断子字符串或字符在父字符串中出现的位置索引
strings.Index(s, str string) int返回子字符串 str 在字符串 s 中的第一个出现位置的索引-1 表示不包含。strings.LastIndex(s, str string) int返回子字符串 str 在字符串 s 中最后一次出现位置的索引-1 表示不包含。strings.IndexRune(s string, r rune) int返回字符 r 在字符串 s 中的索引。
示例
package mainimport (fmtstrings
)func main() {str : Hi, Im Marc, Hi.fmt.Printf(The position of \Marc\ is: %d\n, strings.Index(str, Marc))fmt.Printf(The position of the first instance of \Hi\ is: %d\n, strings.Index(str, Hi))fmt.Printf(The position of the last instance of \Hi\ is: %d\n, strings.LastIndex(str, Hi))fmt.Printf(The position of \Burger\ is: %d\n, strings.Index(str, Burger))
}输出
The position of Marc is: 8
The position of the first instance of Hi is: 0
The position of the last instance of Hi is: 14
The position of Burger is: -12.1.4、字符串替换
strings.Replace(str, old, new string, n int) string将字符串 str 中的前 n 个字符串 old 替换为字符串 new并返回一个新的字符串。如果 n -1则替换所有字符串 old。
2.1.5、统计字符串出现次数
strings.Count(s, str string) int计算字符串 str 在字符串 s 中出现的非重叠次数。
示例
package mainimport (fmtstrings
)func main() {str : Hello, how is it going, Hugo?manyG : ggggggggggfmt.Printf(Number of Hs in %s is: %d\n, str, strings.Count(str, H))fmt.Printf(Number of double gs in %s is: %d\n, manyG, strings.Count(manyG, gg))
}输出
Number of Hs in Hello, how is it going, Hugo? is: 2
Number of double g’s in gggggggggg is: 52.1.6、重复字符串
strings.Repeat(s, count int) string返回一个新的字符串该字符串由 count 次重复字符串 s 组成。
示例
package mainimport (fmtstrings
)func main() {origS : Hi there! newS : strings.Repeat(origS, 3)fmt.Printf(The new repeated string is: %s\n, newS)
}输出
The new repeated string is: Hi there! Hi there! Hi there!2.1.7、修改字符串大小写
strings.ToLower(s) string将字符串 s 中的所有 Unicode 字符转换为小写。strings.ToUpper(s) string将字符串 s 中的所有 Unicode 字符转换为大写。
示例
package mainimport (fmtstrings
)func main() {orig : Hey, how are you George?fmt.Printf(The original string is: %s\n, orig)fmt.Printf(The lowercase string is: %s\n, strings.ToLower(orig))fmt.Printf(The uppercase string is: %s\n, strings.ToUpper(orig))
}输出
The original string is: Hey, how are you George?
The lowercase string is: hey, how are you george?
The uppercase string is: HEY, HOW ARE YOU GEORGE?2.1.8、修剪字符串
strings.TrimSpace(s)剔除字符串开头和结尾的空白符号。strings.Trim(s, cutset)剔除字符串开头和结尾的指定字符 cutset。strings.TrimLeft(s, cutset)剔除字符串开头的指定字符 cutset。strings.TrimRight(s, cutset)剔除字符串结尾的指定字符 cutset。
2.1.9、分割字符串
strings.Fields(s)根据空白符分割字符串返回一个字符串切片。strings.Split(s, sep)根据指定的分隔符 sep 分割字符串返回一个字符串切片。
示例
package mainimport (fmtstrings
)func main() {str : The quick brown fox jumps over the lazy dogsl : strings.Fields(str)fmt.Printf(Splitted in slice: %v\n, sl)for _, val : range sl {fmt.Printf(%s - , val)}fmt.Println()str2 : GO1|The ABC of Go|25sl2 : strings.Split(str2, |)fmt.Printf(Splitted in slice: %v\n, sl2)for _, val : range sl2 {fmt.Printf(%s - , val)}fmt.Println()str3 : strings.Join(sl2, ;)fmt.Printf(sl2 joined by ;: %s\n, str3)
}输出
Splitted in slice: [The quick brown fox jumps over the lazy dog]
The - quick - brown - fox - jumps - over - the - lazy - dog -
Splitted in slice: [GO1 The ABC of Go 25]
GO1 - The ABC of Go - 25 -
sl2 joined by ;: GO1;The ABC of Go;252.1.10、拼接 slice 到字符串
strings.Join(sl []string, sep string) string将元素类型为 string 的 slice 使用分割符 sep 拼接成一个字符串。
2.1.11、从字符串中读取内容
strings.NewReader(str)生成一个 Reader 并读取字符串中的内容然后返回指向该 Reader 的指针。
示例
package mainimport (fmtstrings
)func main() {str : The quick brown fox jumps over the lazy dogsl : strings.Fields(str)fmt.Printf(Splitted in slice: %v\n, sl)for _, val : range sl {fmt.Printf(%s - , val)}fmt.Println()str2 : GO1|The ABC of Go|25sl2 : strings.Split(str2, |)fmt.Printf(Splitted in slice: %v\n, sl2)for _, val : range sl2 {fmt.Printf(%s - , val)}fmt.Println()str3 : strings.Join(sl2,;)fmt.Printf(sl2 joined by ;: %s\n, str3)
}输出
Splitted in slice: [The quick brown fox jumps over the lazy dog]
The - quick - brown - fox - jumps - over - the - lazy - dog -
Splitted in slice: [GO1 The ABC of Go 25]
GO1 - The ABC of Go - 25 -
sl2 joined by ;: GO1;The ABC of Go;25更多字符串操作的文档请参阅官方文档。
2.2、strconv 包
strconv 包用于字符串与其他基本数据类型之间的转换。
2.2.1、将其他类型转换为字符串
strconv.Itoa(i int) string将整数转换为字符串。strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string将浮点数转换为字符串fmt 表示格式prec 表示精度bitSize 用于区分 float32 和 float64。
示例
package mainimport (fmtstrconv
)func main() {var i int 123var f float64 3.14159s1 : strconv.Itoa(i)s2 : strconv.FormatFloat(f, f, -1, 64)fmt.Printf(Integer to string: %s\n, s1)fmt.Printf(Float to string: %s\n, s2)
}输出
Integer to string: 123
Float to string: 3.141592.2.2、将字符串转换为其他类型
strconv.Atoi(s string) (int, error)将字符串转换为整数。strconv.ParseFloat(s string, bitSize int) (float64, error)将字符串转换为浮点数。
示例
package mainimport (fmtstrconv
)func main() {var str string 666var anInt intvar newStr stringanInt, _ strconv.Atoi(str)fmt.Printf(The integer is: %d\n, anInt)anInt 5newStr strconv.Itoa(anInt)fmt.Printf(The new string is: %s\n, newStr)
}输出
The integer is: 666
The new string is: 671strconv 包中还包含了一些辅助变量如 strconv.IntSize用于获取当前平台下 int 类型的大小位数。
通过 strings 和 strconv 包的强大功能Go 语言提供了丰富的字符串处理和转换工具使得开发者能够高效地处理和转换字符串数据。