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

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

挪威特罗姆瑟夜景

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

概念

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

代码

package mainimport ("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 mainimport "fmt"func main() {//定义一个rune,赋值为Avar a rune = 'A'fmt.Println(a) //打印出A的unicode编码65var b rune = '我'fmt.Println(b) //打印出unicode编码//字符串转为runestr := "hello, 你好"fmt.Println("字符串长度(字节):", len(str))//用[]rune(str)把字符串转化为runefmt.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.lryc.cn/news/479564.html

相关文章:

  • django Forbidden (403)错误解决方法
  • pdmaner连接sqlexpress
  • 如果编译不通过,且感觉代码没有问题,大概率就是中文引起的问题
  • java反序列化学习之CommonCollections3利用链的学习
  • 超详细:Vue入门
  • 基础网络安全知识
  • 大语言模型工作原理笔记
  • 安全工程师入侵加密货币交易所获罪
  • 使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程
  • lora训练模型 打造个人IP
  • mybatis+postgresql,无感读写json字段
  • 苍穹外卖学习记录
  • 大数据成功应用商业解决方案的例子
  • 《Python使用sqlite3数据库》
  • XHCI 1.2b 规范摘要(14)
  • (蓝桥杯C/C++)——基础算法(下)
  • 详解Rust标准库:VecDeque 队列
  • 网络协议都有哪些?
  • 非公平锁和公平锁的区别
  • 11月7日星期四今日早报简报微语报早读
  • 【Python】轻松实现机器翻译:Transformers库使用教程
  • 【数据集】【YOLO】【目标检测】道路结冰数据集 1527 张,YOLO目标检测实战训练教程!
  • Java链表及源码解析
  • 十、快速入门go语言之方法
  • JVM 处理多线程并发执行
  • 【D3.js in Action 3 精译_039】4.3 D3 面积图的绘制方法及其边界标签的添加
  • 布谷直播源码部署服务器关于数据库配置的详细说明
  • Xfce桌面设置右键菜单:用右键打开VSCode
  • 【NLP自然语言处理】深入探索Self-Attention:自注意力机制详解
  • Pytorch训练时报nan