go语言 rune 类型

news/2024/12/5 4:54:09/

ASCII 码只需要 7 bit 就能完整地表示,但只能表示英文字母在内的 128 个字符,为了表示世界上大部分的文字系统,发明了 Unicode ,它是 ASCII 的超集,包含世界上书写系统中存在的所有字符,并且为每个代码分配一个标准编号(称为 Unicode CodePoint),在 go 语言中称为 rune,是 int32 的别名

go 语言中 ,字符串的底层表示是 byte(8 bit) 序列,而不是 rune( 32 bit )序列

func main() {str := "nihao"length := len(str)fmt.Println(length)for i, _ := range str {fmt.Println(reflect.TypeOf(str[i]))}
}

运行结果为:

但是,如果使用 for range 遍历字符串取值的时候,得到的 value 类型为 rune 类型(3字符),也就是 int32 类型,对应 Unicode 字符型

func main() {str := "nihao"length := len(str)fmt.Println(length)for _, v := range str {fmt.Println(reflect.TypeOf(v))}
}

 运行结果:


修改字符串

所以在go语言中修改字符串的时候,针对不同的情况来进行编写:

当字符串中有中文字符:

此时需要将字符串转换为 []rune 切片进行操作


func main() {str := "你好"fmt.Printf("修改前:%s", str)fmt.Println()strr := []rune(str)strr[0] = '我'fmt.Printf("修改后:%s", string(strr))
}

结果:

 如果使用 []byte 的话编译会不通过

当字符串中只有英文时:

此时使用 []rune 或者 []byte 都可以,但是一般会使用 []byte:

func main() {str := "nihao"fmt.Printf("修改前:%s", str)fmt.Println()strr := []rune(str)strr[0] = 'w'fmt.Printf("[]rune修改后:%s", string(strr))fmt.Println()strrr := []byte(str)strrr[0] = 'w'fmt.Printf("[]byte修改后:%s", string(strr))fmt.Println()
}

运行结果:


http://www.ppmy.cn/news/1123021.html

相关文章

点云从入门到精通技术详解100篇-机载 LiDAR 点云滤波及分类(中)

目录 3.2 研究区概况 3.3 两种滤波算法结果对比 3.4 结果评价 3.4.1 结果精度 3.4.2 结果对比

Linux学习笔记-应用层篇

1、Linux进程、线程概念/区别 Linux进程和线程是计算机系统中两种不同的资源分配和调度单位。 进程是计算机系统进行资源分配和调度的基本单位,也被认为是正在运行的程序。在面向线程的计算机结构中,进程是线程的容器。进程拥有独立的内存和系统资源&am…

openjdk和oracle jdk的区别

OpenJDK 和 Oracle JDK 都是 Java Development Kit (JDK) 的不同实现,用于开发和运行 Java 应用程序。它们有一些区别,但也有很多相似之处。以下是它们之间的主要区别: 开源性质: OpenJDK 是开源的,由一个社区维护和开…

Python_ithheima_第二阶段

第一章 01-初识对像 02 类的成员方法 03 类和对象 04 构造方法 05 魔术方法 06 封装 07 封装的课后练习题讲解 08 继承的基础语法 pass关键字的功能是“语法补全” 同名成员或方法,谁先来谁优先级高 09 复写父类成员和调用父类成员 10 变量的类型注解 11 函数和方法…

Python:Django框架的Hello wrold示例

Django是Python的目前很常用的web框架,遵循MVC设计模式。 以下介绍如何安装Django框架,并生成最简单的项目,输出Hello world。(开发工具VScode) 一、安装Django 在VScode终端控制台执行以下指令安装Django python install django 如果要查…

C语言动态实现顺序栈

#include <bits/stdc.h> using namespace std; #define ElemType int #define MAXSIZE 200 #define OK 1 /* 可以定义一个 overflow是溢出&#xff0c;为-1 */ typedef struct //定义栈的结构体 {ElemType* base;ElemType* top;int stacksize; }SqStack;void Ini…

聊聊jedis连接池参数配置

序 本文主要研究一下jedis连接池的参数配置 JedisConfig redis/clients/jedis/JedisPoolConfig.java public class JedisPoolConfig extends GenericObjectPoolConfig<Jedis> {public JedisPoolConfig() {// defaults to make your life with connection pool easier…

基于SSM的乡镇篮球队管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…