go语言字符与字符串相关
ASCII
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统

字符
本质上来说,计算机中一切都是字节的,字符串也是多个字节组合而成,就是多个字节形成的有序序 列。但是对于多字节编码的中文来说,用一个字节描述不了,需要多个字节表示一个字符,Go提供了 rune类型。
- byte:兼容ASCII码的字符,是byte类型,即uint8别名,占用1个字节
- rune:汉字等字符,unicode编码,是rune类型,即int32别名,占用4个字节
- 一个字符字面量使用单引号引起来
字符串与字节序列转换



string(一个整数),强制类型转换一个整数,相当于把整数当unicode码,去查一个字符,最后返回 字符串
string(整数序列),强制类型转换一个整数序列,也是转成字符串

字符串特性
字面常量,只读,不可变 线性数据结构,可以索引 值类型 utf-8编码
长度
使用内建函数len,返回字符串占用的字节数。时间复杂度为O(1),字符串是字面常量,定义时已经知道 长度,保存在元数据中。
索引
不支持负索引,索引范围[0, len(s)-1]。 即使是有中文,索引指的是按照字节的偏移量。
时间复杂度O(1),使用索引计算该字符相对开头的偏移量即可。 对于顺序表来说,使用索引效率查找效率是最高的。
s[i] 获取索引i处的UTF-8编码的一个字节。
遍历
使用索引遍历,相当于字节遍历。


字符串相关包
字符串是字面常量,不可修改,很多操作都是返回新的字符串, strings提供了大多数字符串操作函数。
拼接
Join:使用间隔符拼接字符串切片
Builder:多次拼接,推荐
fmt.Sprintf:方便快捷,推荐
简单拼接字符串常用+、fmt.Sprintf。如果手里正好有字符串的序列,可以考虑Join。

如果反复多次拼 接,strings.Builder是推荐的方式。bytes.Buffer用法同strings.Builder。

查询
时间复杂度是O(n),效率不高
Index:从左至右搜索,返回子串第一次出现的字节索引位置。未找到,返回-1。若子串为空,返回0。
LastIndex:从右至左搜索,返回子串第一次出现的字节索引位置。未找到,返回-1。
IndexByte、IndexRune与Index类似;LastIndexByte与LastIndex类似。
IndexAny:从左至右搜索,找到给定的字符集字符串中任意一个字符就返回索引位置。未找到返 回-1。
Contains*方法本质上就是Index*方法,只不过返回bool值,方便使用bool值时使用。
LastIndexAny与IndexAny搜索方向相反。
Count:从左至右搜索子串,返回子串出现的次数。
大小写
ToLower:转换为小写
ToUpper:转换为大写
前后缀
HasPrefix:是否以子串开头
HasSuffix:是否以子串结尾

移除
TrimSpace:去除字符串两端的空白字符。 TrimPrefix、TrimSuffix:如果开头或结尾匹配,则去除。否则,返回原字符串的副本。
TrimLeft:字符串开头的字符如果在字符集中,则全部移除,直到碰到第一个不在字符集中的字符 为止。
TrimRight:字符串结尾的字符如果在字符集中,则全部移除,直到碰到第一个不在字符集中的字 符为止。
Trim:字符串两头的字符如果在字符集中,则全部移除,直到左或右都碰到第一个不在字符集中的 字符为止。

类型转换
数值类型转换
低精度向高精度转换可以,高精度向低精度转换会损失精度
无符号向有符号转换,最高位是符号位
byte和int可以互相转换
float和int可以相互转换,float到int会丢失精度
bool和int不能相互转换
不同长度的int和float之间可以互相转换
fmt.Println(int(3.14)) // 错误,不允许无类型float常量转到int
var a = 3.14 // 定义有类型变量转换就没有问题
fmt.Printf("%T: %[1]v => %T %[2]d\n", a, int(a)) // float64: 3.14 => int 3


b := 'a'
e := 1
c := b + e // rune和int类型不能加,必须转换。比如c := int(b) + e或c := b + rune(e)
fmt.Println(c)
字符串转换


go语言字符与字符串相关的更多相关文章
- C语言字符和字符串随记
==========================第11章 字符和字符串函数==========================震惊:字符串常量属于静态存储类,常量引号中的内容作为指向该字符串存储位 ...
- C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
- C 语言字符 和字符串输出
int main(void){ char ch; char str[80]; printf("Input a string: "); //先输入字符串 gets(str);/ ...
- C语言中的字符和字符串
C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...
- c语言字符数组与字符串的使用详解
转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- C 语言实例 - 查找字符在字符串中出现的次数
C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include <stdio.h> int main( ...
- js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this
内置对象: 语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in / 打印josn的时候采用for...in Date 获取当前事件: var date = ...
- C语言之“字符”与“字符串”之间的区别解析
在C语言中,“字符”与“字符串”之间,是有区别的.这一篇文章中,我们将介绍一下,在C语言中的“字符”与“字符串”,它们之间的区别. 首先,一个很明显的区别是: “字符”,使用单引号作为定界符,而“字符 ...
- sql语言:如何查询字符串某个字符的个数?
sql语言:如何查询字符串某个字符的个数? 这语句太精彩了! select len('05011045')-len(replace('05011045','0',''))
随机推荐
- 在java中new一个对象的流程是什么?
Dog dog=new Dog()背后执行过程 这个涉及到字节码文件结构,类加载机制,堆,栈的认识等知识点. 在执行new的时候可以大致分为二个过程,初始化以及实例化,初始化就是类的加载过程,首先我们 ...
- react商品详情页、购物车逻辑、首页上拉加载、下滑刷新
1.回顾 2.点击列表进入产品的详情页面 设计向页面的布局结构,设计详情页面,入口导入布局文件 // index.js 入口文件 import Detail from '@/Detail'; < ...
- mongodb导入数据,保创建新项目
1.回顾 2.导入数据 2.1 excel数据表格 2.2 设计导入数据的路由 routes/users.js router.get('/upload', function (req, res, ne ...
- bpmnjs的基本使用(vue)
bpmn-js在vue中的基本使用 效果: 下载依赖包 npm i bpmn-js bpmn-js-properties-panel camunda-bpmn-moddle "bpmn-js ...
- 第一推动|2023年VSCode插件最新推荐(54款)
本文介绍前端开发领域常用的一些VSCode插件,插件是VSCode最重要的组成部分之一,本文列出了我自己在以往工作经验中积累的54款插件,个人觉得这些插件是有用或有趣的,根据它们的作用,我粗略的把它们 ...
- 方差分析1—单因素方差分析(R语言)
方差分析是由英国著名统计学家:R.A.Fisher推导,也叫F检验,用于多个样本间均数的比较(分析类别变量.有序变量).当包含的因子是解释变量时,关注的重点通常会从预测转向组别差异的分析.方差分析是一 ...
- 基于SpringBoot实现单元测试的多种情境/方法(二)
本文分享自天翼云开发者社区@<基于SpringBoot实现单元测试的多种情境/方法(二)>, 作者:才开始学技术的小白 1 Mock基础回顾 在上一篇分享中我们详细介绍了简单的.用moc ...
- day110:MoFang:重新构造用户关系状态&添加好友&处理好友申请&获取申请好友历史记录&好友列表显示
目录: 1.用户关系状态:重新构造 2.添加好友 3.处理好友申请 4.获取申请好友历史记录 5.好友列表 day109+day110所学内容流程图 1.用户关系状态:重新构造 在day109博客的前 ...
- 【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
问题描述 查看Java Storage SDK,想找一个 uploadWithResponse 的示例代码,但是通过全网搜索,结果没有任何有帮助的代码.使用最近ChatGPT来寻求答案,得到非常有格 ...
- 2020-09-29:介绍volatile功能。
福哥答案2020-09-29:#福大大架构师每日一题# 功能如下:1.内存可见.2.禁止指令重排序. 实现如下:1.字节码层面 ACC_VOLATILE 2.JVM层面volatile内存区的读写 都 ...