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的许多令人迷惑的问题.下面是本 ...
随机推荐
- 「NOI2015」荷马史诗 (k叉huffman树/k叉合并果子)
是个多叉huffman树,思想类比合并果子. 具体见 CrazyDave 的博客 CODE #include <bits/stdc++.h> using namespace std; ty ...
- QPS 和 TPS
- Verilog Tricks
1,可用generate产生512*FIFO 2,Vivado的warning也要全部排除 3,小module测完再往大module加 4,复位和IDLE处的置零操作一定要写全了 5,设计通信接收机时 ...
- sql server 游标的知识
一:认识游标 游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行.用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立 ...
- synchronized和AtomicXXX效率比较
在Java中,i++和++i都是xian线程不安全的,如果要用十个线程累加一个资源,就会出现错误.synchronized和Atomic是实现线程安全常用方法.而二者效率问题孰优孰劣?本着规律符合任意 ...
- 7.26T1四分图匹配
四分图匹配 题目描述 一天晚上,zzh 在做梦,忽然梦见了她. 见到她,zzh 也不去看她,只顾低头自语…… “噫,OI 这个东西,真是无奇不有.” “嘿,你又学了什么?” “嗯,学到了一种算法,”z ...
- Linux查看文件大小的几种方法
##stat命令 stat filepath xanarry@ThinkPad:/$ stat ~/Downloads/jdk-8u60-linux-x64.tar.gz File: '/home/x ...
- List的子类特点
List的子类特点: ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 ...
- Java并发指南5:JMM中的final关键字解析
本文转载自互联网,侵删 与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的 ...
- Linux生成key
[root@centos7 ~]# ssh-keygen -b [ -t rsa #这里的-b 2048 是密钥加密的长度,最好设大点 Generating public/private rsa ke ...