【GO】字符串练习题

提取身份证号关键信息

题目描述

在身份信息处理中,需要从身份证号"110101199001011234"中提取生日年份和最后 4 位数字,用切片综合操作得到 "19901234"。

输出示例

19901234

实现代码

Go 复制代码
package main

import "fmt"

func main() {
	s := "110101199001011234"
	fmt.Print(s[6:10], s[14:18])
}

提取核心品质词汇

题目描述

从语句"忠诚铸魂,勤奋立业,创新强国,奉献为民"中,按指定索引提取字符,组合成 "忠诚勤奋创新奉献"。

输出示例

忠诚勤奋创新奉献

实现代码

Go 复制代码
package main

import "fmt"

func main() {
	s := "忠诚铸魂,勤奋立业,创新强国,奉献为民"
	s1 := []rune(s)
	fmt.Print(string(s1[0:2]), string(s1[5:7]), string(s1[10:12]), string(s1[15:17]))
}

订单编号生成

题目描述

电商系统生成订单编号时,需要拼接固定前缀、日期和随机数,分别用三种方式实现。

  • 定义变量:prefix = "ORD"(前缀)、date = "20260310"(日期)、randomNum = 8899(随机数)
  • 用加号方式拼接成格式:"ORD-20260310-8899"
  • fmt.Sprintf拼接相同格式的订单编号
  • strings.Builder逐段拼接相同格式的订单编号

输出示例

+生成订单号:ORD-20260310-8899

Sprintf生成订单号:ORD-20260310-8899

Builder生成订单号:ORD-20260310-8899

实现代码

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

func main() {
	// 定义订单编号组成部分
	prefix := "ORD"
	date := "20260310"
	randomNum := 8899
    // 1. 加号方式拼接
    fmt.Println(prefix + "-" + date + "-" + strconv.Itoa(randomNum))

	// 2. Sprintf方式拼接订单号
	orderIdSprintf := fmt.Sprintf("%s-%s-%d", prefix, date, randomNum)
	fmt.Printf("Sprintf生成订单号:%s\n", orderIdSprintf)

	// 3. Builder方式逐段拼接
	var builder strings.Builder
	builder.WriteString(prefix)
	builder.WriteString("-")
	builder.WriteString(date)
	builder.WriteString("-")
	builder.WriteString(fmt.Sprintf("%d", randomNum))
	orderIdBuilder := builder.String()
	fmt.Printf("Builder生成订单号:%s\n", orderIdBuilder)
}

拼接日志

题目描述

日志系统需要拼接多条固定日志内容,strings.Builder在多次拼接时比Sprintf更高效,演示多段短字符串的拼接场景。

  • 定义 4 个日志片段:logPart1 = "【INFO】"logPart2 = "服务启动:"logPart3 = "api-server"logPart4 = "端口:8080"
  • fmt.Sprintf拼接成完整日志:"【INFO】服务启动:api-server 端口:8080"
  • strings.Builder依次拼接 4 个片段(中间加空格)
  • 输出两种方式的完整日志

输出示例

Sprintf拼接日志:【INFO】服务启动:api-server 端口:8080

Builder拼接日志:【INFO】服务启动:api-server 端口:8080

实现代码

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

func main() {
	// 定义日志片段
	logPart1 := "【INFO】"
	logPart2 := "服务启动:"
	logPart3 := "api-server"
	logPart4 := "端口:8080"

	// 1. Sprintf方式拼接长文本
	logSprintf := fmt.Sprintf("%s%s%s %s", logPart1, logPart2, logPart3, logPart4)
	fmt.Printf("Sprintf拼接日志:%s\n", logSprintf)

	// 2. Builder方式逐段拼接
	var builder strings.Builder
	builder.WriteString(logPart1)
	builder.WriteString(logPart2)
	builder.WriteString(logPart3)
	builder.WriteString(" ")
	builder.WriteString(logPart4)
	logBuilder := builder.String()
	fmt.Printf("Builder拼接日志:%s\n", logBuilder)
}

分割与拼接操作

题目描述

  • 定义 tags = "基础,进阶,实战"
  • strings.Split 按逗号分割,strings.Join 用竖线拼接
  • 输出拼接结果

输出示例

拼接后标签:基础|进阶|实战

实现代码

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

func main() {
	tags := "基础,进阶,实战"
	// 分割
	tagSlice := strings.Split(tags, ",")
	// 拼接
	joinTags := strings.Join(tagSlice, "|")
	
	fmt.Printf("拼接后标签:%s\n", joinTags)
}

包含判断与子串替换

题目描述

  • 定义 text = "学习Go,用好Go"
  • strings.Contains 判断是否含 "Go",strings.Replace 替换所有 "Go" 为 "Go 语言"
  • 输出判断结果和替换后文本

输出示例

包含"Go":true

替换后:学习Go语言,用好Go语言

实现代码

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

func main() {
	text := "学习Go,用好Go"
	// 判断包含
	hasGo := strings.Contains(text, "Go")
	// 替换所有(n=-1)
	replaceText := strings.Replace(text, "Go", "Go语言", -1)
	
	fmt.Printf("包含\"Go\":%t\n", hasGo)
	fmt.Printf("替换后:%s\n", replaceText)
}
相关推荐
月屯4 小时前
grpc-api模块化依赖
golang
瑶山5 小时前
IDEA 配置Go语言开发环境、GOPATH传统 Go 项目导入
java·golang·intellij-idea
会编程的土豆5 小时前
【go】 Go语言中的 defer:从入门到理解底层机制(讲透版)
开发语言·后端·golang
初心未改HD8 小时前
Go语言Slice切片底层原理深度解析
开发语言·golang
世界尽头与你8 小时前
Go 语言高级函数特性
开发语言·golang
geovindu9 小时前
go: Iterator Pattern
开发语言·设计模式·golang·迭代器模式
不知名的老吴10 小时前
聊一聊年轻的编程语言Golang与Rust
开发语言·golang·rust
初心未改HD11 小时前
Go语言Map底层原理与并发安全深度解析
开发语言·golang
geovindu1 天前
go: Chain of Responsibility Pattern
开发语言·设计模式·golang·责任链模式
Tomhex1 天前
Go内存逃逸优化技巧
golang