Go字符串
1. 字符串的声明是使用
package main
import "fmt"
func main() {
/*
Go中的字符串是一个字节的切片。
可以通过将其内容封装在“”中来创建字符串。Go中的字符串是Unicode兼容的,并且是UTF-8编码的。
字符串是一些字节的集合。
理解为一个字符的序列。
每个字符都有固定的位置(索引,下标,index:从0开始,到长度减1)
语法:"",``
字符:--->对应编码表中的编码值
A-->65
B-->66
a-->97
...
字节:byte-->uint8
*/
//1.定义字符串
s1 := "hello中国"
s2 := `hello world`
fmt.Println(s1)
fmt.Println(s2)
//2.字符串的长度:返回的是字节的个数
fmt.Println(len(s1))
fmt.Println(len(s2))
//3.获取某个字节
fmt.Println(s2[0]) //获取字符串中的第一个字节
a := 'h'
b := 104
fmt.Printf("%c,%c,%c\n", s2[0], a, b) //h,h,h
//4.字符串的遍历
//for循环
for i := 0; i < len(s2); i++ {
//fmt.Println(s2[i])
fmt.Printf("%c\t", s2[i])
//h e l l o w o r l d
}
fmt.Println()
//for range
for _, v := range s2 {
//fmt.Println(i,v)
fmt.Printf("%c", v) //hello world
}
fmt.Println()
//5.字符串是字节的集合
slice1 := []byte{65, 66, 67, 68, 69}
s3 := string(slice1) //根据一个字节切片,构建字符串
fmt.Println(s3) //ABCDE
s4 := "abcdef"
slice2 := []byte(s4) //根据字符串,获取对应的字节切片
fmt.Println(slice2) //[97 98 99 100 101 102]
//6.字符串不能修改
fmt.Println(s4) //abcdef
//s4[2] = 'B'
}
package main import (
"fmt"
) func main() { //string底层是一个byte数组,因此string也可以进行切片处理
str := "hellooooooo" // :=类型推导
//使用切片获取到
slice := str[6:]
fmt.Println("slice=", slice) //slice= ooooo
fmt.Printf("%p\n", &str) //0xc0000401f0
fmt.Printf("%p\n", &slice) //0xc000040200 //string是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串
//str[0] = 'z' [编译不会通过,报错,原因是string是不可变] //如果需要修改字符串,可以先将string -> []byte / 或者 []rune -> 修改 -> 重写转成string
arr1 := []byte(str)
arr1[0] = 'z'
str = string(arr1)
fmt.Println("str=", str) //str= zellooooooo
//str的内存地址没有改变
fmt.Printf("%p\n", &str) //0xc0000401f0 //我们转成[]byte后,可以处理英文和数字,但是不能处理中文
//原因是 []byte 字节来处理 ,而一个汉字,是3个字节,因此就会出现乱码
//解决方法是 将string 转成 []rune 即可, 因为 []rune是按字符处理,兼容汉字
//[]byte-->uint8
//[]rune-->int32
arr2 := []rune(str)
arr2[0] = '北'
str2 := string(arr2)
fmt.Println("str=", str2) //str= 北ellooooooo
}
2. strings包下的关于字符串的函数
package main import (
"fmt"
"strings"
) func main() {
/*
strings包下的关于字符串的函数 */
s1 := "helloworld"
//1.是否包含指定的内容-->bool
fmt.Println(strings.Contains(s1, "abc")) //false
//2.是否包含chars中任意的一个字符即可
fmt.Println(strings.ContainsAny(s1, "abcd")) //true
//3.统计substr在s中出现的次数
fmt.Println(strings.Count(s1, "lloo")) //0 //4.以xxx前缀开头,以xxx后缀结尾
s2 := "20190525课堂笔记.txt"
if strings.HasPrefix(s2, "201905") {
fmt.Println("19年5月的文件。。")
}
if strings.HasSuffix(s2, ".txt") {
fmt.Println("文本文档。。")
} //索引
//helloworld
fmt.Println(strings.Index(s1, "lloo")) //查找substr在s中的位置,如果不存在就返回-1
fmt.Println(strings.IndexAny(s1, "abcdh")) //查找chars中任意的一个字符,出现在s中的位置
fmt.Println(strings.LastIndex(s1, "l")) //查找substr在s中最后一次出现的位置 //字符串的拼接
ss1 := []string{"abc", "world", "hello", "ruby"}
s3 := strings.Join(ss1, "-")
fmt.Println(s3) //abc-world-hello-ruby //切割
s4 := "123,4563,aaa,49595,45"
ss2 := strings.Split(s4, ",")
//fmt.Println(ss2)
for i := 0; i < len(ss2); i++ {
fmt.Println(ss2[i])
} //重复,自己拼接自己count次
s5 := strings.Repeat("hello", 5)
fmt.Println(s5) //hellohellohellohellohello //替换
//helloworld
s6 := strings.Replace(s1, "l", "*", -1)
fmt.Println(s6) //he**owor*d
//fmt.Println(strings.Repeat("hello",5)) //大小写
s7 := "heLLo WOrlD**123.."
fmt.Println(strings.ToLower(s7)) //hello world**123..
fmt.Println(strings.ToUpper(s7)) //HELLO WORLD**123.. /*
截取子串:
substring(start,end)-->substr
str[start:end]-->substr
包含start,不包含end下标
*/
fmt.Println(s1) //helloworld
s8 := s1[:5]
fmt.Println(s8) //hello
fmt.Println(s1[5:]) //world
}
3. strconv包
package main import (
"fmt"
"strconv"
) func main() {
/*
strconv包:字符串和基本类型之前的转换
string convert
*/
//fmt.Println("aa"+100) //java中可以这样写
//1.字符串转bool类型
s1 := "true"
b1, err := strconv.ParseBool(s1)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%T,%t\n", b1, b1) //bool,true ss1 := strconv.FormatBool(b1)
fmt.Printf("%T,%s\n", ss1, ss1) //string,true //2.字符串转整数
s2 := "100"
i2, err := strconv.ParseInt(s2, 2, 64)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%T,%d\n", i2, i2) //int64,4 ss2 := strconv.FormatInt(i2, 10)
fmt.Printf("%T,%s\n", ss2, ss2) //string,4 //itoa() int-->string
//atoi() string-->int
i3, err := strconv.Atoi("-42") //转为int类型
fmt.Printf("%T,%d\n", i3, i3) //int,-42
ss3 := strconv.Itoa(-42)
fmt.Printf("%T,%s\n", ss3, ss3) //string,-42
}
Go字符串的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- vue报错[Vue warn]: The data property "record" is already declared as a prop. Use prop default value instead.
当我写了一个子组件,点击打开子组件那个方法时报了一个错 这句话说明意思呢?谷歌翻译一下↓ 数据属性“record”已声明为prop. 请改用prop默认值. 感觉翻译的有点怪,通过最后修改代码后大概意 ...
- gflag的简单入门demo
gflags 一. 下载与安装 这里直接使用包管理器安装: sudo apt install libgflags-dev 二. gflags的简单使用 1. 定义需要的类型 格式: DEFINE_类型 ...
- SD卡报错“error -110 whilst initialising SD card”
目前开发遇到了某些SD卡和TI的SOC芯片的驱动不协调的地方,具体表现为: uboot 阶段初始化mmc dev 1 没有任何串口信息输出,无法读写mmc Kernel阶段报错”SD卡初始化失败 er ...
- 题解【洛谷P5959】[POI2018]Plan metra
题面 一道比较神仙的构造题. 首先确定 \(1\) 到 \(n\) 的路径长度,不妨设其长为 \(m\) . 通过观察发现,\(m\) 就是 \(\min_{1<i<n}\{dist_{1 ...
- stopPropagation() 方法
定义和用法 不再派发事件. 终止事件在传播过程的捕获.目标处理或起泡阶段进一步传播.调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点. 语法 event.stopPropa ...
- Mybatis-生成逆向工程后对数据库的模糊查询详解
MyBatis-使用逆向工程中方法进行模糊查询 1.应用mybatis逆向工程会大大的提高我们的开发效率,如何应用mabatis 逆向生成的代码进行模糊查询那. 2.首先看一下pojo 层中examp ...
- java基础(五)之static关键词的作用
static关键词的作用 1.静态成员变量的语法特定2.静态函数的语法特定3.静态代码块的语法特定 定义静态成员变量 Person.java class Person{ static int a; } ...
- Jarvis OJ - [XMAN]level1 - Writeup
Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...
- h264 RTP STAP-A单时间聚合包
参考官方文档:http://www.rosoo.net/Files/UpFiles/RsProduct/avtools/2009-4/2009491562537854.txt 聚合包的RTP荷载格式的 ...
- Install macOS High Sierra on Any Supported Intel-based PC
1.准备制作安装盘前的准备https://www.tonymacx86.com/threads/unibeast-install-macos-high-sierra-on-any-supported- ...