9.3 字符串本质与处理字符串

字符串本质

字符串是由若干字符组成的序列。

字符是以数字的形式存储在计算机内部的。

ASCII编码用7位二进制数表示了128(27)个字符,包括26个英文字母大小写,0-9的10个阿拉伯数字,一些标点符号、数学符号和控制字符。

Unicode编码用32位二进制数表示了128000个字符,涵盖了135种现代及古老的语言,其开头的128个字符就是ASCII字符。

每个Unicode字符,在计算机内部都会按照某种算法被转换为特定的字节序列。这种算法被称为转换格式,其中最著名且常用的是UTF-8,它的发明者同时也是Go语言的发明者之一,正是大名鼎鼎的Ken Thompson

UTF-8编码是一种针对Unicode字符的可变长编码,用1到6个字节编码一个Unicode字符。最早的128个ASCII字符,其UTF-8编码与ASCII编码完全一样。

Go语言字符串在内存中就是由其每个字符的UTF-8编码组成的只读字节切片。

  • 一个字符串在内存中的字节切片长度可通过内置函数len求得。
  • 通过基零的连续下标访问字符串时,所访问的其实就是该字符串字节切片中的每个字节。(与6.1中的字符串遍历方式1对应

从字符串字节切片中提取与某个字符相对应的字节序列,经由转换格式的逆向运算,即可得到该字符的Unicode码点,这在Go语言中被定义为rune类型,即32位整型int32,专门用于表示单个字符。

  • 通过包含range子句的for循环访问字符串时,所访问的其实就是组成该字符串的每个字符,rune类型的Unicode码点。(与6.1中的字符串遍历方式2对应)

处理字符串

标准库的strings包提供了一套完备的字符串处理函数,例如:

  • strings.ToLower 将字符串中的大写字母转换为小写字母
  • strings.Index 在字符串中查找子串,返回第一个匹配子串首字符的下标,没找到返回-1
  • strings.TrimSpace 删除开头和末尾的所有空白字符
// 将字符串转为小写
// strings包的ToLower函数可将字符串中的所有大写字母转换为小写
package mainimport ("strings"
)func main() {upper := "VERY IMPORTANT MESSAGE"println(upper)		// VERY IMPORTANT MESSAGElower := strings.ToLower(upper)println(lower)		// very important message
}
// 查找字符串
// strings包的Index函数返回其第二个参数字符串在其第一个参数字符串中第一次出现的位置,没出现则返回-1 
package mainimport ("fmt""strings"
)func main() {// 0123456s := "surface"// facefmt.Println(strings.Index(s, "face"))	// 3fmt.Println(strings.Index(s, "fave"))	// -1
}
// 删除首位空白字符
// strings包的TrimSpace函数删除字符串的首尾空白字符
package mainimport ("fmt""strings"
)func main() {original := ` Hello World!      
`fmt.Printf("%q\n", original)// "    \n    \t    Hello World!    \t    \n    "trimed := strings.TrimSpace(original)fmt.Printf("%q\n", trimed)// "Hello World!" 
}

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

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

相关文章

mybatis插入uuid主键同时返回主键id

经过尝试下面是一种可以实现的方式,分享一下 1 java 代码 public String insertChildReport(ChildReport childReport) {childReport.setCreateTime(DateUtils.getNowDate());LoginUser loginUser getLoginUser();childReport.setCreateBy(loginUser.getUsername…

【EI会议】2024年测绘、地质与遥感国际会议(SGRS 2024)

2024年测绘、地质与遥感国际会议 2024 International Conference on Surveying, Geology, and Remote Sensing 【1】会议简介 2024年测绘、地质与遥感国际会议,将于不久后隆重召开,这将是一场汇聚全球顶尖专家学者、探讨测绘、地质与遥感领域最新技术、发…

vue3项目+TypeScript前端项目 ———— elemnet-plus,svg图标配置,sass,mock数据

一.集成element-plus 官网地址 安装 pnpm install element-plus 引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.…

Element表格之表头合并、行合并和列合并

el-table合并表头handerMethod_el-table表头合并-CSDN博客 Element表格之表头合并、行合并和列合并_element表格表头合并-CSDN博客 一、合并表头 话不多说,先看效果图: 表格结构如上,其中:header-cell-style对表头做了一些处理。 headFirst…

HTTPS:安全网络通信的基石

在数字化时代,网络通信的安全变得至关重要。HTTPS(超文本传输安全协议)是一种用于保护网络通信的协议,它通过加密技术确保数据传输的安全性和完整性。下面我们就来了解一下HTTPS。 一、HTTPS是什么? HTTPS是HTTP&…

求多个数的最大公约数及比例化简

目录 求多个数的最大公约数及比例化简代码功能概述主要步骤代码详解1. 求两个数的最大公约数2. 求多个数的最大公约数3. 应用示例 示例与应用博客总结 求多个数的最大公约数及比例化简 代码功能概述 这段代码的目的是求多个数的最大公约数(GCD)&#x…

【el-table 实现自定义单选】

el-table 实现自定义单选 示例图片代码 示例图片 代码 row-click"singleElection"<el-table-columnalign"center"label"选择"><template slot-scope"scope"><el-radio:key"scope.row.id"v-model"templa…

ChannelHandlerContext——ChannelHandler和ChannelPipeline之二

目录 ChannelHandlerContext接口 使用ChannelHandlerContext ChannelHandler和ChannelHandlerContext的高级用法 异常处理 处理入站异常 处理出站异常 本文继上文《ChannelHandler和ChannelPipeline之一》&#xff0c;接着讲ChannelHandlerContext接口。 ChannelHandlerC…

LeetCode hot100-51-G

200. 岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外&#xff0c;你可以假设该网…

Python 全栈体系【四阶】(五十)

第五章 深度学习 十一、扩散模型 4. 附录&#xff1a;Diffusion的数学推导过程 4.2 Diffusion正向扩散过程推导 设初始数据 x 0 x_0 x0​符合分布 q ( x 0 ) q(x_0) q(x0​)&#xff0c;即训练集分布&#xff0c;然后不断向其中添加高斯噪声&#xff0c;高斯噪声本身是不可…

需求响应+配网重构!含高比例新能源和用户需求响应的配电网重构程序代码!

前言 配电网重构作为配电网优化运行的手段之一&#xff0c;通过改变配电网的拓扑结构&#xff0c;以达到降低网损、改善电压分布、提升系统的可靠性与经济性等目的。近年来&#xff0c;随着全球能源消耗快速增长以及环境的日趋恶化&#xff0c;清洁能源飞速发展&#xff0c;分…

超简单白话文机器学习 - 逐步回归Lasso,Ridge正则化(含算法讲解,公式全解,手写代码实现,调包实现)

1. 提高泛化能力 1.1 概念 正则化是一种在机器学习和统计建模中用于防止过拟合的技术。过拟合是指模型在训练数据上表现很好&#xff0c;但在未见过的测试数据或新数据上表现不佳。正则化通过在损失函数&#xff08;如最小二乘误差&#xff09;中添加一个惩罚项&#xff0c;限…

【Spring】Spring事务管理

1. 事务的基本概念 1.1简介 数据库事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完全地执行&#xff0c;要么完全地不执行。Spring的事务管理主要基于AOP&#xff08;面向切面编程&#xff09;技术&#xff0c;通过声明式或编程式的方式来实现。Spring框架内…

仓库管理WMS软件(Warehouse Management Software)百科解析

一、什么是仓库管理软件&#xff08;WMS&#xff09;&#xff1f; 仓库管理软件&#xff08;WMS&#xff09;全称Warehouse Management System&#xff0c;是一种专门用于仓库作业流程优化和库存控制的软件系统。它通过先进的自动识别与数据采集技术&#xff0c;实现对仓库货物…

Leecode热题100---114:二叉树展开为链表

题目&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同…

SCSS基本使用

SCSS&#xff08;Sassy CSS&#xff09;是一种 CSS 预处理器&#xff0c;它是 CSS 语言的一个扩展&#xff0c;增加了变量、嵌套规则、混合&#xff08;mixins&#xff09;、函数等功能&#xff0c;使得编写 CSS 更加高效和易于维护。SCSS 代码最终会被编译成标准的 CSS 代码。…

Lambda表达式使用及详解

Java 8引入的Lambda表达式是一种重要的功能&#xff0c;它允许你以更简洁、更直接的方式传递方法。Lambda可以被用来代替只有单个抽象方法的接口的匿名实现类。这里有一些Lambda表达式的实际应用场景及其示例&#xff1a; 1. 集合操作 在处理集合时&#xff0c;如List或Set&a…

Oracle数据库中的PCTFREE解析

PCTFREE是Oracle数据库中用于表或索引段空间管理的一个重要存储参数。这个参数定义了一个数据块中保留的最小空闲空间百分比&#xff0c;旨在为现有行的未来更新预留空间。具体来说&#xff1a; 当设置一个数据块的PCTFREE值时&#xff0c;你实际上是告诉Oracle在这个数据块填满…

Spring Boot | Spring Boot 实现 “记住我“ 功能

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 )二、实现 "记住我" 功能 ( 通过 "HttpSecurity类" 的 rememberMe( )方法来实现 "记住我" 功能 ) :2.1 基于 "简单加密 Token" 的方式 ( 实现 "记住我&…

av_dump_format经验分析,FFmpeg获取媒体文件总时长(FLV获取总时长的误区)

播放器有个功能&#xff0c;当用户打开视频时&#xff0c;需要读取媒体文件的总时长等信息&#xff0c;不巧的时&#xff0c;获取FLV时总失败&#xff0c;下面来具体分析下FLV和MP4获取总时长的原因和区别&#xff1a; 播放器有个获取MediaInfo的接口&#xff0c;功能如下&am…