【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)
}
相关推荐
名字还没想好☜1 小时前
Go 的 io.Reader/Writer 组合实战:io.Copy、TeeReader、MultiWriter 优雅处理数据流
开发语言·后端·golang·go·iphone
ttwuai4 小时前
Go 后台定时任务启停不生效怎么办?先查调度同步链路
开发语言·后端·golang
运维开发笔记5 小时前
3.1 Go if 语句学习笔记
golang
进击的程序猿~1 天前
Go Interface源码深度解析指南
开发语言·后端·golang
—Qeyser1 天前
Sponge 脚手架快速创建后端API及接口使用完整教程
golang
不爱洗脚的小滕1 天前
【Golang】Go 语言实现高可用、用户态感知与多端广播的服务端 SSE 架构
开发语言·架构·golang
报错小能手1 天前
Go 简介
开发语言·后端·golang
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
2501_931803752 天前
深入理解 GORM:从模型定义到关联查询的核心原理
golang