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之间可以互相转换

  1. fmt.Println(int(3.14)) // 错误,不允许无类型float常量转到int
  2. var a = 3.14 // 定义有类型变量转换就没有问题
  3. fmt.Printf("%T: %[1]v => %T %[2]d\n", a, int(a)) // float64: 3.14 => int 3

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

字符串转换

go语言字符与字符串相关的更多相关文章

  1. C语言字符和字符串随记

    ==========================第11章 字符和字符串函数==========================震惊:字符串常量属于静态存储类,常量引号中的内容作为指向该字符串存储位 ...

  2. C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  3. C 语言字符 和字符串输出

    int main(void){ char ch; char str[80]; printf("Input a string: ");    //先输入字符串 gets(str);/ ...

  4. C语言中的字符和字符串

    C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...

  5. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  6. Swift语言指南(十)--字符串与字符

    原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...

  7. C 语言实例 - 查找字符在字符串中出现的次数

    C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include <stdio.h> int main( ...

  8. js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this

    内置对象:  语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in   /   打印josn的时候采用for...in Date 获取当前事件:   var date = ...

  9. C语言之“字符”与“字符串”之间的区别解析

    在C语言中,“字符”与“字符串”之间,是有区别的.这一篇文章中,我们将介绍一下,在C语言中的“字符”与“字符串”,它们之间的区别. 首先,一个很明显的区别是: “字符”,使用单引号作为定界符,而“字符 ...

  10. sql语言:如何查询字符串某个字符的个数?

    sql语言:如何查询字符串某个字符的个数? 这语句太精彩了! select len('05011045')-len(replace('05011045','0',''))

随机推荐

  1. 使用Docusaurus搭建个人网站

    第一次使用 Docusaurus 搭建我的个人网站 第一步 安装 node 环境 安装 Node.js 16.14 或更高版本(可以通过执行 node -v 命令来查看当前所用的 Node.js 版本 ...

  2. MongoDB基础知识梳理

    简介 MongoDB 是由 C++ 编写的开源 NoSQL 和基于文档的数据库.MongoDB 提供了面向文档的存储方式,操作起来比较简单和容易,支持"无模式"的数据建模,可以存储 ...

  3. keyclaok~keycloak存到cookie中的值和session_state

    keycloak存到cookie中的值 AUTH_SESSION_ID KEYCLOAK_IDENTITY KEYCLOAK_SESSION AUTH_SESSION_ID 用户的当前session_ ...

  4. 0001 嵌入式开发带你从小白到大佬系列之——Linux开发环境搭建—Windows-VMware-Ubuntu环境配置

    如文章标题,我们安装的Linux开发环境是:Windows-VMware-Ubuntu环境 配置,即在windows系统下安装VMware虚拟机,之后在VMware中配置安装Linux系统的常用发行版 ...

  5. 回顾.NET系列:Framework、Net Core、Net 过往

    目录 一.个人最近工作变化 二.Framework.Net Core..NET 时过境迁 Framework:爱你定格在4.8 .Net Foundation:.Net变革大脑 重新统一的 .NET ...

  6. MySQL(七)索引

    索引的数据结构 1 为什么使用索引 索引概述 索引(Index)是帮助MySQL高效获取数据的数据结构.是"排好序的快速查找结构",满足特定的查找算法 索引是在存储引擎中实现的,每 ...

  7. 什么是BFC,BFC的作用,以及怎么触发BFC

    什么是BFC: 块级格式化上下文 BFC的作用: BFC其实就是规定了网页布局的规范     1.BFC就是页面上的一个独立容器,容器里面的元素不会影响到外面的元素     解释:BFC的基本改变,最 ...

  8. RDIFramework.NET开发框架编码管理助力业务编码的自动处理

    1.概述 几乎每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理中的订单编号,商品管理中的商品编码,项目管理中的项目编码等等,针对这一系列的编码如果直接写在程序中,不仅复杂,代码重复 ...

  9. java项目 宿舍管理系统 (源码+数据库文件+1w字论文+ppt)

    java项目 宿舍管理系统 (源码+数据库文件+1w字论文+ppt)技术框架:java+springboot+vue+mysql后端框架: Spring Boot.Spring MVC.MyBatis ...

  10. Centos7 开机时遇到initramfs-xxx.img not found错误导致虚拟机无法开启问题处理

    1.背景 一台运行在Esxi上面的VM重启后报initramfs-xxx.img not found错误. 按任意键后出现以下错误. 之前在运维Centos7的时候解决过Kernel panic - ...