Golang - 字符串操作汇总

news2024/9/28 7:16:25

Golang 字符串操作汇总

  • 1 string初始化
  • 2 遍历string
  • 3 byte & Rune
    • 3.1 初始化
    • 3.2 byte和rune区别

1 string初始化

func newString() {
	//1. 字符串初始化
	// 方式一:使用简写声明,带有字符串的变量,支持特殊字符
	str := "one hello \n world"
	fmt.Println(str)

	// 方式二:反引号,不支持特殊字符
	str1 := `two hello \n world`
	str2 := `h1
             h2
             h3`
	fmt.Println(str1)
	fmt.Println(str2)

	// 方式三:var关键字
	var str3 string
	str3 = "three hello world"
	fmt.Println(str3)

	fmt.Println("------------------")
}

在这里插入图片描述

2 遍历string

func forString() {
	//字符串作为for循环中的范围
	//方式一:通过index char
	for index, s := range "abcdef" {
		fmt.Printf("%c 索引值是 %d\n", s, index)
	}

	// 方式二:通过index
	str := "Hello"
	for c := 0; c < len(str); c++ {
		fmt.Printf("\n字符 = %c 字节 = %v", str[c], str[c])
	}

	fmt.Println()
	fmt.Println("------------------")
}

在这里插入图片描述

3 byte & Rune

3.1 初始化

func byteAndRune() {
	//创建和初始化一个字节片
	myslice1 := []byte{72, 101, 108, 108, 111}

	//从切片创建字符串
	mystring1 := string(myslice1)

	//显示字符串
	fmt.Println("String 1: ", mystring1)

	fmt.Println("------------------")

	//创建和初始化一个符文切片,十六进制
	myslice2 := []rune{0x47, 0x65, 0x65, 0x6b, 0x73}

	//从切片创建字符串
	mystring2 := string(myslice2)

	//显示字符串
	fmt.Println("String 2: ", mystring2)

	fmt.Println("------------------")
}

在这里插入图片描述

3.2 byte和rune区别

  • rune是用来区分字符值和整数值的
  • rune 等同于int32,即4个字节长度,常用来处理unicode或utf-8字符。
  • byte 等同于int8,即一个字节长度,常用来处理ascii字符
  • 中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。
  • ASCII编码是1个字节,而UTF-8是可变长的编码
  • 当要表示中文等非ASCll编码的字符时,需要使用UTF-8编码来保证不会乱码。
  • UTF8编码下一个中文汉字由3~4个字节组成,而字符串是由byte字节组成,所以长度也是byte字符长度,这样遍历时遇到中文就乱码了
  • 所谓对字符串的修改其实不是对字符串本身的修改,而是复制字符串,同时修改值,即重新分配来内存。
  • 在go中修改字符串,需要先将字符串转化成数组,[]byte 或 []rune,然后再转换成 string型。
func byteAndRune() {
	str := "你好 world"
	// 以字节数来计算长度
	fmt.Printf("len(str):%d\n", len(str))               // 返回len(str):12
	fmt.Printf("len(byte(str)):%d\n", len([]byte(str))) // 返回len(str):12

	// 以字符数来计算长度
	fmt.Printf("len(rune(str)):%d\n", len([]rune(str))) // 返回len(rune(str)):8

	for i := 0; i < len(str); i++ {
		fmt.Printf("%c", str[i]) // ä½&nbsp;好 world
	}

	fmt.Println()

	//使用range,其实是使用rune类型来编码的,rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。
	for _, value := range str {
		fmt.Printf("%c", value) // 你好 world
	}

	fmt.Println()

	// 修改全是ASCII编码的字符串
	str1 := "abc"
	s1 := []byte(str1)
	s1[0] = 'b'
	fmt.Println(string(s1)) // bbc

	// 修改非ASCII编码的字符串
	str2 := "你好,世界"
	s2 := []rune(str2)
	s2[0] = '不'
	fmt.Println(string(s2)) // 不好,世界
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三个月后,快手To B怎么样了?

未来&#xff0c;如何独立作战和走出快手的TOC“客户资源圈”&#xff0c;或将成为快手TOB新的十字路口。 作者|斗斗 编辑|皮爷 出品|产业家 人口红利终结&#xff0c;流量红利终结&#xff0c;超常规的高速增长终结。TOC模式的路越来越难走了。 快手与抖音作为短视频…

光耦特性以及计算

光耦特性 光耦器件电路图 这是我们常用的。光耦器件以及它的连接方式。 左侧R1是我们主要考虑的。 电流最小值是要让LED能够保持发光状态&#xff0c;最大值的话。1.不能让LED烧坏了。2. LED的负极端是单片机的。 这里主要是看引脚灌入电流的最大值。 电气规格 我们看看说…

手机数据包抓包详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是手机数据包抓包详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

并发编程——6.共享模型之不可变

目录6.共享模型之不可变6.1.日期转换的问题6.1.1.问题提出6.1.2.解决思路——同步锁6.1.3.解决思路——不可变6.2.不可变设计6.3.享元模式6.3.1.简介6.3.2.体现6.3.3.DIY6.4.final 原理6.5.无状态本文笔记整理来自黑马视频https://www.bilibili.com/video/BV16J411h7Rd/?p197&…

Unity脚本(二)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU/?share_sourcecopy_web Transform 对象的位置、旋转和缩放 场景中的每个对象都有一个Transform&#xff0c;用于存储和操作对象的位置、旋转和缩放。 每个Transform都可以有一个父级&#xff0c;能够分…

C语言强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如&#xff0c;如果您想存储一个 long 类型的值到一个简单的整型中&#xff0c;您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型&#xff0c;如下所示&am…

gitlab-ci.yml关键字(五)tags 、only 、when

tags 使用Tags用于选择Runner的标签列表 我们在创建Runner 时可以给该Runner打上特定的标签&#xff0c;那后续流水线中的job如果需要使用特定标签的Runner执行时&#xff0c;就需要使用tags来标记 比如这里有两个标签的Runner 也可以对当前的runner进行一些配置上的设置 …

2022总结:我是怎样从一个混子到如今小有所成

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1f342;抽根烟&#xff0c;吹个牛b(不是 入门 如果硬要问我是在什么时候入门的&#xff0c;那就要说到高一…

MySQL添加用户及用户权限管理

目录 1、用户 <1> 用户信息 <2> 创建用户 <3> 删除用户 <4> 修改用户密码 2、用户权限管理 <1> 查看用户权限 <2> 给用户授权 <3> 回收权限 1、用户 <1> 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysq…

机器翻译与数据集

机器翻译指的是将文本序列从一种语言自动翻译成另一种语言。 使用单词级词元化时的词表大小&#xff0c;将明显大于使用字符级词元化时的词表大小。为了缓解这一问题&#xff0c;我们可以将低频词元视为相同的未知词元。 通过截断和填充文本序列&#xff0c;可以保证所有的文…

【LeetCode每日一题】——154.寻找旋转排序数组中的最小值 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 二分查找 二【题目难度】 困难 三【题目编号】 154.寻找旋转排序数组中的最小…

windows下OpenCV安装教程以及vs2019配置opencv教程

文章目录一. OpenCV下载二. OpenCV安装及配置三. VS2019项目配置OpenCV一. OpenCV下载 官网地址&#xff1a;Home - OpenCV 下载地址&#xff1a;OpenCV download | SourceForge.net 二. OpenCV安装及配置 双击下载好的安装包进行安装 安装过程实际上是一个解压过程 选择…

java开发机动车考试驾照考试-科一科四考试在线题库系统

简介 本系统主要是进行科一科四考试和练习的网上考试系统&#xff0c;分为A1B1、A2B2、C1C2的科一科四考试系统&#xff0c;当学员点击开始考试&#xff0c;系统将自动生成随机题目100道&#xff08;选择题80道&#xff0c;判断题20道&#xff09;的试卷&#xff0c;考试时间4…

【数据结构】LeetCode移除元素、删除排序数组中的重复项、合并两个有序数组

目录 一、移除元素 1、题目说明 2、题目解析 二、删除排序数组中的重复项 1、题目说明 2、题目解析 三、合并两个有序数组 1、题目说明 2、题目解析 一、移除元素 1、题目说明 题目链接&#xff1a;移除元素 给你一个数组nums和一个值val&#xff0c;你需要原地移除所有数值等…

php宝塔搭建部署实战彩纸屋在线少儿编程系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的彩纸屋在线少儿编程系统源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#x…

第一个完整的CMake工程

第一个完整的CMake工程一、概述二、准备工作2.1 创建工程2.2 创建源码目录三、换个地方保存目标二进制文件3.1 add_subdirectory 指令说明3.2 重设目标二进制生成目录四、如何安装4.1 目标文件的安装4.2 普通文件的安装4.3 非目标文件的可执行程序安装(比如脚本之类)&#xff1…

git 源码下载安装最新版本

问题 用yum install git 下载后查看版本 git --version 显示的版本太低&#xff0c;自己去github下载比较新的版本 解决 https://github.com/git/git/tags 查看最新的版本&#xff0c;并且复制tar.gz下载链接 wget 你复制的链接 我的例子&#xff1a;wget https://github.…

DevOps:开发运维全流程

目录 &#x1f9e1;什么是DevOps&#xff1f; &#x1f9e1;什么是CI/CD&#xff1f; &#x1f49f;这里是CS大白话专场&#xff0c;让枯燥的学习变得有趣&#xff01; &#x1f49f;没有对象不要怕&#xff0c;我们new一个出来&#xff0c;每天对ta说不尽情话&#xff01; &…

第一章 计算机网络体系结构

目录(1) 概念与功能(2) 组成与分类(3) 标准化工作与组织(4) 性能指标(5) 分层结构、协议、接口、服务(6) 7 层 OSI 参考模型(7) TCP/IP 模型(8) 五层参考模型(1) 概念与功能 1、概念 计算机网络&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备…

RHI_Shader Compare(HLSL、GLSL、MSL 、WGSL、OpenCL) Debug All

为了后续平台能够更好的封装跨平台Shader&#xff0c;本部分主要来看一下各平台Shader的语法特点、编译方式以及Debug方式等对比。 对于各类Shader语言还是先来看一下官方的文档&#xff0c;里边有具体的阐述&#xff0c;也是比较权威的文档&#xff1a; HLSL官方文档GLSL官…