GO_文件处理---字符串操作

Go 语言对字符串的操作分为两大核心包:

  1. strings:字符串增删查改、分割、匹配、截取等处理
  2. strconv:字符串与基本数据类型(bool/int/float)互相转换本文

一、strings 包:字符串常用操作

1. Contains 判断子串是否存在

语法:strings.Contains(s, substr string) bool作用:判断字符串 s 是否包含子串 substr,存在返回 true,不存在返回 false

go

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hellogo"
	res1 := strings.Contains(str, "hello")
	res2 := strings.Contains(str, "java")
	fmt.Println(res1) // true
	fmt.Println(res2) // false
}

2. Join 拼接切片内字符串

语法:strings.Join(strs []string, sep string) string作用:使用指定分隔符,将字符串切片拼接成一个完整字符串

go

Go 复制代码
func main() {
	arr := []string{"a", "b", "go"}
	res := strings.Join(arr, ",")
	fmt.Println(res) // a,b,go
}

3. Index 查找子串下标位置

语法:strings.Index(s, substr string) int作用:返回子串第一次出现的索引;不存在返回 -1

go

Go 复制代码
func main() {
	str := "helloworld"
	index := strings.Index(str, "world")
	fmt.Println(index) // 5
}

4. Split 按分隔符拆分字符串

语法:strings.Split(s, sep string) []string作用:以指定分隔符切割字符串,返回字符串切片

go

Go 复制代码
func main() {
	str := "java,go,python"
	slice := strings.Split(str, ",")
	fmt.Println(slice) // [java go python]
}

5. Trim 去除字符串首尾指定字符

语法:strings.Trim(s, cutset string) string作用:清除字符串两头包含在 cutset 中的所有字符

go

Go 复制代码
func main() {
	str := "  ##hello##  "
	res := strings.Trim(str, " #")
	fmt.Println(res) // hello
}

6. Fields 按空白分割

语法:strings.Fields(s string) []string作用:自动忽略连续空格、制表符、换行符,拆分出有效文本切片

go

Go 复制代码
func main() {
	str := "  go  java    python  "
	slice := strings.Fields(str)
	fmt.Println(slice) // [go java python]
}

二、strconv 包:字符串与基础类型互转

go

Go 复制代码
import (
	"fmt"
	"strconv"
)

1. Append 系列:类型转字符串并追加到 byte 切片

适合高性能拼接场景,直接操作字节数组,减少内存拷贝

  • AppendBool(dst []byte, b bool) []byte:追加布尔值
  • AppendInt(dst []byte, i int64, base int) []byte:追加数字,base 代表进制(10 = 十进制)
  • AppendQuote(dst []byte, s string) []byte:追加带双引号的字符串

完整示例:

go

Go 复制代码
func main() {
	// 初始化容量1024的字节切片
	slice := make([]byte, 0, 1024)
	// 追加布尔
	slice = strconv.AppendBool(slice, true)
	// 追加十进制数字1234
	slice = strconv.AppendInt(slice, 1234, 10)
	// 追加带引号字符串
	slice = strconv.AppendQuote(slice, "abcgohello")

	// byte切片转string打印
	fmt.Println("slice = ", string(slice))
}

2. Format 系列:其他类型 → 字符串

2.1 FormatBool 布尔转字符串

go

Go 复制代码
str := strconv.FormatBool(false)
fmt.Println(str) // "false"
2.2 FormatFloat 浮点数转字符串

函数签名:FormatFloat(f float64, fmt byte, prec, bitSize int) string参数说明:

  • f:待转换浮点数
  • fmt:格式标识,'f' 普通小数格式
  • prec:小数点保留位数,-1 自动适配
  • bitSize:32/float32、64/float64

go

Go 复制代码
str := strconv.FormatFloat(3.14, 'f', -1, 64)
fmt.Println(str) // 3.14
2.3 Itoa 整型数字转字符串

等价于 FormatInt(int64(num), 10)

go

Go 复制代码
str := strconv.Itoa(66666)
fmt.Println(str) // "66666"

3. Parse 系列:字符串 → 其他类型(会返回 error)

转换失败时 err 不为空,业务中必须判断错误

3.1 ParseBool 字符串转布尔

仅支持 "true" / "false",其他字符串转换报错

go

Go 复制代码
func main() {
	var flag bool
	var err error
	flag, err = strconv.ParseBool("true")
	if err == nil {
		fmt.Println("flag = ", flag)
	} else {
		fmt.Println("转换失败 err = ", err)
	}
}
3.2 Atoi 数字字符串转 int

Atoi = ParseInt 十进制简化版,下划线忽略错误(简单场景使用)

go

Go 复制代码
a, _ := strconv.Atoi("567")
fmt.Println(a) // 567

三、完整可运行整合 Demo

go

Go 复制代码
package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// ========== strings 包测试 ==========
	s := "hellogo,golang"
	fmt.Println("Contains(hello):", strings.Contains(s, "hello"))
	fmt.Println("Index(go):", strings.Index(s, "go"))
	fmt.Println("Split:", strings.Split(s, ","))

	fieldStr := "  go  java  "
	fmt.Println("Fields:", strings.Fields(fieldStr))
	fmt.Println("Trim:", strings.Trim("###golang###", "#"))

	joinSlice := []string{"2026", "07", "18"}
	fmt.Println("Join:", strings.Join(joinSlice, "-"))

	fmt.Println("========================")

	// ========== strconv Append ==========
	slice := make([]byte, 0, 128)
	slice = strconv.AppendBool(slice, true)
	slice = strconv.AppendInt(slice, 999, 10)
	slice = strconv.AppendQuote(slice, "go笔记")
	fmt.Println("Append结果:", string(slice))

	// ========== Format 类型转字符串 ==========
	str1 := strconv.FormatBool(true)
	str2 := strconv.FormatFloat(2.5, 'f', 2, 64)
	str3 := strconv.Itoa(888)
	fmt.Println("Format转换:", str1, str2, str3)

	// ========== Parse 字符串转类型 ==========
	b, err := strconv.ParseBool("false")
	if err == nil {
		fmt.Println("ParseBool:", b)
	}

	num, _ := strconv.Atoi("12345")
	fmt.Println("Atoi:", num)
}

四、核心知识点总结(复习重点)

strings 包速记

  1. Contains:判断是否包含子串
  2. Index:查找子串索引,无则返回 - 1
  3. Split:按分隔符拆分字符串为切片
  4. Trim:清除首尾指定字符
  5. Fields:自动切割所有空白,提取有效单词
  6. Join:切片拼接为完整字符串

strconv 包速记

  1. Append:追加到 byte 切片,高性能拼接
  2. Format :基础类型 → string
    • FormatBool / FormatFloat / Itoa(int 转字符串)
  3. Parse :string → 基础类型,返回 error 捕获非法转换
    • ParseBool / Atoi(数字字符串转 int)
相关推荐
ctlover2 小时前
Python模块与包
开发语言·python
雨田言炎2 小时前
十、QThread多线程
linux·服务器·开发语言·前端·qt
在世修行3 小时前
从零打造 C# 工业视觉检测系统(十一):Task 异步编程与实时性保障
开发语言·c#·task异步
BUG研究员_13 小时前
Runnable与LCEL
开发语言·人工智能·python
牛艺翔15 小时前
C++基础
开发语言·c++
键盘会跳舞15 小时前
C++ :容器适配器stack源码级拆解
开发语言·c++··stack·先进后出
美味蛋炒饭.15 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
我星期八休息15 小时前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
问商十三载15 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
不负岁月无痕15 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试