go string类型的特性
参考文章: http://c.biancheng.net/view/36.html
1. 获取ascii类型字符的长度个数和获取utf8类型字符长度的个数
a. len("咪咪") //return 6 这获取的是ASCII长度
b.utf8.RuneCountInString("咪咪") // return 2获取的是utf8汉字长度个数
2. 字符串遍历, 以ASCII方式遍历和以Unicode方式遍历
// 测试字符串长度
str := "我是 abcd" // ASCII码类型遍历
for i := 0; i < len(str); i++ {
fmt.Printf("ASCII %c, %d\n", str[i], str[i])
} // unicode码类型遍历
for _, s := range str {
fmt. Printf("Unicode %c, %d \n", s, s)
}
输出结果
ASCII æ,
ASCII ,
ASCII ,
ASCII æ,
ASCII ,
ASCII ¯,
ASCII ,
ASCII a,
ASCII b,
ASCII c,
ASCII d,
Unicode 我,
Unicode 是,
Unicode ,
Unicode a,
Unicode b,
Unicode c,
Unicode d,
可以看到以ASCII方式插入的代码是有乱码的, 我们可以以unicode方式打印处理. 这两者的区别在于使用哪一种for循环
ASCII: 使用for 下标遍历, 后面的数字表示的是在ASCII中的编码.
Unicode: 使用 for range遍历. 后面的数字表示的是, 在unicode中的编码
扩展: UTF-8 和 Unicode 有何区别?
Unicode 与 ASCII 类似,都是一种字符集。
字符集为每个字符分配一个唯一的 ID,我们使用到的所有字符在 Unicode 字符集中都有一个唯一的 ID,例如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。汉字“你”在 Unicode 中的编码为 20320,在不同国家的字符集中,字符所对应的 ID 也会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。
UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:
- 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
- 从 128 到 0x10ffff 表示其他字符。
根据这个规则,拉丁文语系的字符编码一般情况下每个字符占用一个字节,而中文每个字符占用 3 个字节。
广义的 Unicode 指的是一个标准,它定义了字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等。
参考: http://c.biancheng.net/view/18.html
3. 类型强转
//类型强转
str := "这是一个aaa"
bytestr := []byte(str)
fmt.Println(bytestr)
fmt.Println(string(bytestr))
a. string强转成byte: []byte(str)
b. byte强转成string: string(byte)
4. 高效字符串拼接方式
//字符串拼接
hammer := "吃我一锤"
sickle := "死吧" /** 普通字符串拼接方式 */
hammer += sickle
fmt.Println(hammer)
fmt.Println(sickle) /** 高效字符串连接的方式 */
// 声明字节缓冲区
var stringBuilder bytes.Buffer //把字符串写入缓冲
stringBuilder.WriteString(hammer)
stringBuilder.WriteString(sickle) // 将缓冲以字符串形式输出
fmt.Println(stringBuilder.String())
输出:
吃我一锤死吧
死吧
吃我一锤死吧死吧
简单的东西未必高效。除了加号连接字符串,Go 语言中也有类似于 StringBuilder 的机制来进行高效的字符串连接
5. 常用的一些格式化样式中的动词及功能
| 动 词 | 功 能 |
|---|---|
| %v | 按值的本来值输出 |
| %+v | 在 %v 基础上,对结构体字段名和值进行展开 |
| %#v | 输出 Go 语言语法格式的值 |
| %T | 输出 Go 语言语法格式的类型和值 |
| %% | 输出 % 本体 |
| %b | 整型以二进制方式显示 |
| %o | 整型以八进制方式显示 |
| %d | 整型以十进制方式显示 |
| %x | 整型以十六进制方式显示 |
| %X | 整型以十六进制、字母大写方式显示 |
| %U | Unicode 字符 |
| %f | 浮点数 |
| %p | 指针,十六进制方式显示 |
6.
7.
go string类型的特性的更多相关文章
- 从String类型字符串的比较到StringBuffer和StringBuilder
1. String类型 String类源码 为了从本质上理解String类型的特性所在,我们从String类型的源码看起,在源码中String类的注释中存在以下: /**Strings are con ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- C#string类型总结
字符串的特性:不可变性,每对字符串做拼接或者重新赋值之类的操作,都会在内存中产生一个新的实例. 所以说,在.Net平台下,如果你对一个字符串进行大量的拼接赋值等操作,会产生大量的垃圾. --- ...
- java动手动脑和课后实验型问题String类型
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...
- java内存分配和String类型的深度解析
[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...
- 利用自动类型转换存储string类型
类型转换是我们最常用的功能.就像上战场用的枪一样,敌人用的冲锋枪, 自己手里就一把步枪,打起仗来始终有点不爽. 因此,基本功能的完善很重要. 通常情况下我们需要String类型转其它的基础类型.这时我 ...
- 可选参数、命名参数、.NET的特殊类型、特性
1.可选参数和命名参数 1.1可选参数 语法: [修饰符] 返回类型 方法名(必选参数n,可选参数n) 注意: 1.必选参 ...
- C++之string类型详解
C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...
- 【转】java内存分配和String类型的深度解析
一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...
随机推荐
- [hdoj6415 Rikka with Nash Equilibrium][dp]
http://acm.hdu.edu.cn/showproblem.php?pid=6415 Rikka with Nash Equilibrium Time Limit: 10000/5000 MS ...
- linux 批量创建用户
user 模块添加用户 python -c 'from passlib.hash import sha512_crypt; import getpass; print (sha512_crypt.en ...
- vue中把props中的值赋值给data
vue中把props中的值赋值给data 2018年12月26日 14:37:11 木豆mudou 阅读数 3497 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上 ...
- MySQL 中Redo与Binlog顺序一致性问题
首先,我们知道在MySQL中,二进制日志是server层的,主要用来做主从复制和即时点恢复时使用的.而事务日志(redo log)是InnoDB存储引擎层的,用来保证事务安全的.现在我们来讨论一下My ...
- 路由器配置——DHCP+DHCP中继服务配置
一.实验目的:掌握DHCP服务基本配置及DHCP中继服务配置,实现全网互通 二.拓扑图: 三.具体步骤配置: (1)R1路由器配置: Router>enable --进入特权模式 Router ...
- Git Clone 的时候遇到 Filename too long 错误
在对某些仓库进行 Git Clone 的时候遇到了 Filename too long 的错误提示. 错误提示如下图: 可以有下面的一些解决办法: 可以有下面的一些解决办法: 在 Git bash 中 ...
- locale与C字符编码
ref: https://www.cnblogs.com/gatsby123/p/11150472.html Unicode 字符集 代码点 与编码表中的某个字符对应的代码值.在Unicode标准中, ...
- 23333 又是一篇水文章(以下是各种复制来的关于maven转成eclipse项目)
(转载) 当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定 ...
- vue中.sync修饰符,实现子组件实时更新父组件的值
vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定. 不过它有一个前身,先来看看.sync出现之前是如何实现的 父组件中(传递给子组件一个值:p ...
- 1632:【 例 2】[NOIP2012]同余方程
#include<bits/stdc++.h> #define ll long long using namespace std; void Exgcd(ll a,ll b,ll & ...