当前位置: 首页 > article >正文

【go从零单排】Strings and Runes 字符串和字符

挪威特罗姆瑟夜景

Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

概念

在Go语言中,rune 是一个内置的数据类型,用于表示一个Unicode字符。它实际上是一个别名,代表 int32 类型。使用 rune 可以方便地处理字符和字符串中的Unicode字符,尤其是在处理多字节字符集时。
与其他语言不同,Go语言中的字符串并不是由“字符”组成的,而是由Unicode编码的文本组成的,即rune数据类型。

代码

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	//定义字符串s,是一段泰文
	const s = "สวัสดี"
	//打印的长度是unicode字节的长度,而不是字面意义上字符串的长度
	fmt.Println("Len:", len(s))
	//fmt.Printf("%x ", s[i]) 打印每个字节的十六进制表示
	for i := 0; i < len(s); i++ {
		fmt.Printf("%x ", s[i])
	}
	fmt.Println()
	//utf8.RuneCountInString(s) 计算字符串中包含的rune数量
	fmt.Println("Rune count:", utf8.RuneCountInString(s))
	//遍历字符串,fmt.Printf("%#U starts at %d\n", runeValue, idx) 打印每个rune的Unicode表示和起始位置。
	for idx, runeValue := range s {
		fmt.Printf("%#U starts at %d\n", runeValue, idx)
	}

	fmt.Println("\nUsing DecodeRuneInString")
	for i, w := 0, 0; i < len(s); i += w {
		//utf8.DecodeRuneInString(s[i:]) 函数解码字符串中的rune,并打印每个rune的Unicode表示和起始位置
		runeValue, width := utf8.DecodeRuneInString(s[i:])
		fmt.Printf("%#U starts at %d\n", runeValue, i)
		w = width
		//在 examineRune 函数中,根据rune的值进行条件判断,如果rune的值为特定字符,会输出相应的信息。
		examineRune(runeValue) //说实话这段输出没太看明白,意思是如果是能用rune即unicode表示的就输出起始位置,找不到的话就输出found so sua
	}
}

func examineRune(r rune) {

	if r == 't' {
		fmt.Println("found tee")
	} else if r == 'ส' {
		fmt.Println("found so sua")
	}
}

理解

package main

import "fmt"

func main() {
	//定义一个rune,赋值为A
	var a rune = 'A'
	fmt.Println(a) //打印出A的unicode编码65

	var b rune = '我'
	fmt.Println(b) //打印出unicode编码

	//字符串转为rune
	str := "hello, 你好"
	fmt.Println("字符串长度(字节):", len(str))
	//用[]rune(str)把字符串转化为rune
	fmt.Println("字符数(rune):", len([]rune(str)))
	//遍历str并输出索引和值
	for i, r := range str {
		fmt.Printf("Index: %d, Rune: %c\n", i, r)
	}
}

Tips小知识点

  • 使用 rune 类型可以有效地处理Unicode字符,确保在处理多语言文本时不会出现字符截断或错误的问题。
  • rune 可以表示所有Unicode字符,包括汉字、表情符号等,而不仅仅是ASCII字符。(UTF-8也是)

无人扶我青云志,我自踏雪至山巅,与君共勉。
在这里插入图片描述


http://www.kler.cn/a/384106.html

相关文章:

  • 基于C++的决策树C4.5机器学习算法(不调包)
  • 【如何使用 ADB 脚本批量停止 Android 设备上的所有应用】
  • git撤销commit和add
  • ChatGPT 新体验:AI 搜索功能与订阅支付指南
  • ENSP GVRP动态学习VLAN
  • Follow软件的使用入门教程
  • 基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
  • 进程和计划任务管理
  • MapReduce 的 Shuffle 过程
  • 基于matlab的人眼开度识别
  • 代码随想录 | Day38 | 动态规划 :01背包应用 目标和一和零
  • 【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
  • 如何有效销售和应用低代码软件?探索其市场机会与策略
  • LabVIEW VISA通信常见问题
  • (三)使用Vite创建Vue项目,了解Vue3生命周期
  • MySQL如何实现PHP输入安全
  • PPT文件设置了修改权限,如何取消权?
  • 别名路径联想设置
  • 【每日一题】2012考研数据结构 - 求字符串链表公共后缀
  • 网页版五子棋——用户模块(客户端开发)
  • 其他节点使用kubectl访问集群,kubeconfig配置文件 详解
  • ICT网络赛道安全考点知识总结2
  • 使用 GPT-4V 全面评估泛化情绪识别 (GER)
  • 释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作
  • PDF编辑工具Adobe Acrobat DC 2023安装教程(附安装包)
  • JavaScript猜数游戏小游戏