【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)
}
相关推荐
灯澜忆梦5 小时前
【Go Zap 日志库】#1 |快速上手 + 配置详解
开发语言·后端·golang
不是万能的豆学长8 小时前
排查Go服务40天后的内存泄漏问题
开发语言·后端·golang·go
tachibana28 小时前
Go 语言 Map 的底层实现原理
开发语言·后端·golang·make
tachibana29 小时前
Go语言里slice是怎么扩容的?
后端·golang·go·切片
西瓜很甜哟10 小时前
golang实现大文件分片上传
后端·golang·html
tachibana21 天前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
王中阳Go1 天前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
for_ever_love__1 天前
LangChain Agentic RAG:让 Agent 自己决定要不要检索、检索几次
人工智能·golang·langchain·rag·langgraph·agentic·自适应检索
谢亮_vipxieliang1 天前
Go gRPC基础与实战
开发语言·后端·golang
徐小黑ACG1 天前
Golang goroutine、通道、锁
开发语言·后端·golang