Go语言中的字符串处理
Go语言中的字符串处理1. 字符串的基本概念在Go语言中字符串是一种不可变的字节序列使用UTF-8编码。字符串的类型为string是Go语言的基本类型之一。package main import fmt func main() { // 字符串字面量 s1 : Hello, World! fmt.Println(s1) // 原始字符串字面量 s2 : Line 1 Line 2 fmt.Println(s2) }2. 字符串的基本操作2.1 字符串长度package main import fmt func main() { s : Hello, 世界 // 字节长度 fmt.Println(Byte length:, len(s)) // 字符长度 fmt.Println(Rune length:, len([]rune(s))) }2.2 字符串拼接package main import fmt func main() { // 使用运算符 s1 : Hello World fmt.Println(s1) // 使用fmt.Sprintf s2 : fmt.Sprintf(%s %s, Hello, World) fmt.Println(s2) // 使用strings.Builder推荐 var builder strings.Builder builder.WriteString(Hello) builder.WriteString( ) builder.WriteString(World) s3 : builder.String() fmt.Println(s3) }2.3 字符串切片package main import fmt func main() { s : Hello, World! // 切片操作 fmt.Println(s[0:5]) // Hello fmt.Println(s[7:]) // World! fmt.Println(s[:5]) // Hello }3. strings包的使用3.1 字符串查找package main import ( fmt strings ) func main() { s : Hello, World! // 查找子串 fmt.Println(strings.Contains(s, World)) // true fmt.Println(strings.Index(s, World)) // 7 fmt.Println(strings.LastIndex(s, l)) // 9 }3.2 字符串分割package main import ( fmt strings ) func main() { s : a,b,c,d // 分割字符串 parts : strings.Split(s, ,) fmt.Println(parts) // [a b c d] // 分割为两个部分 before, after, found : strings.Cut(s, ,) fmt.Println(before, after, found) // a b,c,d true }3.3 字符串替换package main import ( fmt strings ) func main() { s : Hello, World! // 替换所有 result : strings.ReplaceAll(s, World, Go) fmt.Println(result) // Hello, Go! // 替换指定次数 result strings.Replace(s, l, X, 2) fmt.Println(result) // HeXXo, World! }3.4 字符串转换package main import ( fmt strings ) func main() { s : Hello, World! // 转大写 fmt.Println(strings.ToUpper(s)) // HELLO, WORLD! // 转小写 fmt.Println(strings.ToLower(s)) // hello, world! // 首字母大写 fmt.Println(strings.Title(s)) // Hello, World! }3.5 字符串修剪package main import ( fmt strings ) func main() { s : Hello, World! // 修剪空格 fmt.Println(strings.TrimSpace(s)) // Hello, World! // 修剪指定字符 fmt.Println(strings.Trim(s, H!)) // ello, World }4. 字符串的高级操作4.1 字符串和字节切片的转换package main import fmt func main() { s : Hello // 字符串转字节切片 b : []byte(s) fmt.Println(b) // [72 101 108 108 111] // 字节切片转字符串 s2 : string(b) fmt.Println(s2) // Hello }4.2 字符串和rune切片的转换package main import fmt func main() { s : Hello, 世界 // 字符串转rune切片 r : []rune(s) fmt.Println(r) // [72 101 108 108 111 44 32 19990 30028] // rune切片转字符串 s2 : string(r) fmt.Println(s2) // Hello, 世界 }4.3 字符串遍历package main import fmt func main() { s : Hello, 世界 // 字节遍历 fmt.Println(Byte iteration:) for i, b : range []byte(s) { fmt.Printf(%d: %d\n, i, b) } // rune遍历 fmt.Println(Rune iteration:) for i, r : range s { fmt.Printf(%d: %c\n, i, r) } }5. 字符串处理的性能优化5.1 字符串拼接优化package main import ( fmt strings ) func main() { // 低效的拼接方式 var s string for i : 0; i 1000; i { s fmt.Sprintf(%d, i) } // 高效的拼接方式 var builder strings.Builder for i : 0; i 1000; i { builder.WriteString(fmt.Sprintf(%d, i)) } s builder.String() }5.2 字符串比较优化package main import ( fmt strings ) func main() { s1 : Hello s2 : Hello // 字符串比较 fmt.Println(s1 s2) // true // 不区分大小写比较 fmt.Println(strings.EqualFold(s1, s2)) // true }6. 实战应用6.1 解析CSV数据package main import ( fmt strings ) func parseCSV(csv string) [][]string { lines : strings.Split(csv, \n) var result [][]string for _, line : range lines { if line { continue } fields : strings.Split(line, ,) result append(result, fields) } return result } func main() { csv : name,age,city\nAlice,30,New York\nBob,25,London data : parseCSV(csv) for _, row : range data { fmt.Println(row) } }6.2 生成URL参数package main import ( fmt strings ) func buildQueryParams(params map[string]string) string { var parts []string for key, value : range params { parts append(parts, keyvalue) } return strings.Join(parts, ) } func main() { params : map[string]string{ name: Alice, age: 30, city: New York, } query : buildQueryParams(params) fmt.Println(Query:, query) }6.3 字符串模板package main import ( fmt strings ) func renderTemplate(template string, data map[string]string) string { result : template for key, value : range data { placeholder : {{ key }} result strings.ReplaceAll(result, placeholder, value) } return result } func main() { template : Hello, {{name}}! You are {{age}} years old. data : map[string]string{ name: Alice, age: 30, } result : renderTemplate(template, data) fmt.Println(result) }7. 总结字符串是不可变的字节序列使用UTF-8编码使用len()获取字符串的字节长度使用[]rune()转换为rune切片来获取字符长度使用strings.Builder进行高效的字符串拼接使用strings包提供的函数进行各种字符串操作注意字符串遍历的两种方式字节遍历和rune遍历对于频繁的字符串操作选择合适的方法以提高性能掌握字符串与其他类型的相互转换
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2476558.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!