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)
相关推荐
-银雾鸢尾-12 小时前
里氏替换原则
开发语言·c#·里氏替换原则
এ慕ོ冬℘゜12 小时前
JavaScript 数组核心方法实战|新增元素 + 数组转字符串 零基础详解
开发语言·javascript·ecmascript
一个初入编程的小白12 小时前
C语言:函数栈帧与销毁
c语言·开发语言
czhc114007566312 小时前
718:public internl class;partial []
开发语言
临床数据科学和人工智能兴趣组12 小时前
R语言因其强大的统计功能、灵活的编程环境、活跃的社区支持和强大的R扩展包,迅速成为统计学和数据科学领域的首选工具之一
开发语言·数据分析·r语言·r语言-4.2.1
__log13 小时前
弱网环境下的“生命线“:从AI流式响应到大文件上传的稳定性
开发语言·人工智能·php
巧克力男孩dd13 小时前
Python超典型练习题(第一次作业)
开发语言·python·算法
TlSfoward13 小时前
TLSFOWARD TLS指纹
开发语言·数据库·爬虫·搜索引擎·https·php
闲猫14 小时前
LangChain / Core components / Models
开发语言·python·langchain