- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
Golang系列之字符串类型基本介绍
在go语言中,字符串是一种基本类型,和其它开发语言不同,go的字符串是由单个字节连接起来的。go语言统一使用utf-8编码标识Unicode文本。当字符为ASCII编码时,占用1个字节,其它字符占用2到4个字节,中文占用3个字节
补充,这里读者可能会有疑问,ASCII 、Unicode、UTF-8有什么关系?
ASCII:编码包含了 33 个控制字符和 95 个可显示字符,不支持中文字符
Unicode:是一个更大范围的编码表集合,比ASCII更广,囊括了目前世界上所有语言的所有字符
UTF-8:有别于ASCII、Unicode,UTF-8是Unicode编码的实现方式之一,会将 Unicode 字符以某种方式进行编码
详细的可以参考阮一峰大佬的博客:字符编码笔记:ASCII,Unicode 和 UTF-8
golang字符串:
// 定义string变量
var str string
str = "golang"
// 赋值声明变量str1
str1 := "golang"
// 打印字符串和对应字符长度
fmt.Printf("%s length is %d \n" , str , len(str))
go中的string字符串值,是不可以改变对应的字符值的,但是整个字符串可以更改
var str string = "golang"
str = "test"
// 编译报错,cannot assign to str[0]
// str[0] = 's'
// 使用反引号
res := `programming language :
Java
Golang
Python
PHP
...
`
// 双引号也可以实现类似效果,需要加上转义字符等等
res1 := "programming language :\n" +
"Java\n" +
"Golang\n" +
"Python\n" +
"PHP\n" +
"...\n"
fmt.Printf("%s" , res)
fmt.Printf("%s" , res1)
常用的转义字符:
\t
:制表符,通常用于排版\n
:换行符\\
:反斜杆自身\"
:一个"
\r
:一个回车+
号就行str := "golang"
str = str + " learning"
fmt.Printf("%s" , str)
这里有个注意事项,如果字符串太长,+
必须加到上一行的后面,不能换行
str[1]
直接获取,而不用将字符串类型转为数组类型,字符串获取对应区间的数据,遵循“左闭右开”的原则str := "golang,learning"
// [0:6) 左闭右开区间
str1 := str[:6]
// 特殊情况,这里两边都是闭区间[7:len(str)]
str2 := str[7:]
// 注意,这里也是[0:6)
str3 := str[0:6]
fmt.Println("str1=" , str1 , "str2=" , str2 , "str3=", str3)
str := "golang learning(学习)"
// 遍历字符串
for i := 0 ; i <len(str) ; i++ {
ch := str[i]
fmt.Println( i , ch, string(ch))
}
打印了之后,发现中文的都乱码了,为什么?提示一下,这种方式遍历使用的是字节遍历,前面的学习知道,go中字符串是由字节组成的,byte的取值范围是0~255
0 103 g
1 111 o
2 108 l
3 97 a
4 110 n
5 103 g
6 32
7 108 l
8 101 e
9 97 a
10 114 r
11 110 n
12 105 i
13 110 n
14 103 g
15 40 (
16 229 å
17 173
18 166 ¦
19 228 ä
20 185 ¹
21 160
22 41 )
有看过我上一篇博客的读者,链接https://smilenicky.blog.csdn.net/article/details/122639280,可以知道中文对应的Unicode编码是超过255的,而且中文需要占用3个字节,byte只占用1个字节,所以是不能打印出中文字符的
所以,需要换种方法,使用range
关键字,这种方法,使用了rune
存储字符
str := "golang learning(学习)"
for i , ch := range str {
fmt.Println( i , ch, string(ch))
}
打印,中文也可以打印出来:
0 103 g
1 111 o
2 108 l
3 97 a
4 110 n
5 103 g
6 32
7 108 l
8 101 e
9 97 a
10 114 r
11 110 n
12 105 i
13 110 n
14 103 g
15 40 (
16 23398 学
19 20064 习
22 41 )
补充:
byte:代表 UTF-8 编码中单个字节的值,是 uint8 类型的别名,占用一个字节
rune:代表单个 Unicode 字符,是 int32 类型的别名,占用4个字节
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!