golang之strings
针对golang中的字符串的介绍,提供了一些常用的函数和方法
package main import (
"fmt"
"strings"
) func main() { s1 := "abc"
s2 := "ABC"
s3 := s1 + s2
s4 := `hello\n`
fmt.Println("s3:", s3) //abcABC
fmt.Println("s4:", s4) // hello\n
fmt.Println("HasPrefix is") //true
fmt.Println(strings.HasPrefix(s3, "a")) //判断前缀
fmt.Println("HasSuffix is")//false
fmt.Println(strings.HasSuffix(s3, "0")) //判断后缀
fmt.Println("Contains is")//false
fmt.Println(strings.Contains(s3, "9")) //字符串包含关系
fmt.Println("Index is")//-1
fmt.Println(strings.Index(s3, "0")) //判断子字符串或字符在父字符串中出现的位置(索引)
fmt.Println("LastIndex is")//-1
fmt.Println(strings.LastIndex(s3, "0")) //最后出现位置的索引
fmt.Println("Replace is")//abcABC
fmt.Println(strings.Replace(s3,"0","1",-1))//如果 n = -1 则替换所有字符串
fmt.Println("Count is")//0
fmt.Println(strings.Count(s3,"0"))//出现的非重叠次数
fmt.Println("Repeat is") //abcABCabcABC
fmt.Println(strings.Repeat(s3,2))//重复字符串
fmt.Println("ToLower is")//abcabc
fmt.Println(strings.ToLower(s3))//修改字符串大小写
fmt.Println("ToUpper is")//ABCABC
fmt.Println(strings.ToUpper(s3))//修改字符串大小写
fmt.Println("TrimSpace is")//abcABC
fmt.Println(strings.TrimSpace(s3))//修剪字符串 去掉开头和结尾空格
fmt.Println("Trim is")//bcABC
fmt.Println(strings.Trim(strings.TrimSpace(s3),"a"))//修剪字符串 去掉开头和结尾字符串
}
Reader and Replacer
func NewReader(s string) *Reader
通过读取一个字符串之后返回Reader对象,然后实现io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 接口
package main import (
"fmt"
"reflect"
"strings"
) func main() {
reader := strings.NewReader("widuu web")
fmt.Println(reflect.TypeOf(reader)) //类型 *strings.Reader
fmt.Println(reader.Len()) //9
}
注: reader.Len 实现读取字符串的数(包含空格)
func (r *Reader) Read(b []byte) (n int, err error)
读取数据到b中,返回读取的实际大小n,如果出错返回err,例如EOF或者b的长度为0
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello widuu web")
n, err := reader.Read(make([]byte, 10))
if err != nil {
fmt.Println(err)
}
fmt.Println(n) //10
}
func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello web")
b := make([]byte, 10)
n, err := reader.ReadAt(b, 2)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(b[:n])) //llo web
}
func (r *Reader) ReadByte() (b byte, err error)
读取一个byte数据,然后返回的直接就是byte
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello web")
data, err := reader.ReadByte()
if err == nil {
fmt.Println(string(data))
return
}
fmt.Println(err) //返回一个字节h
}
func (r *Reader) ReadRune() (ch rune, size int, err error)
返回的是一个rune类型的
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello web")
r, n, err := reader.ReadRune()
if err != nil {
fmt.Println(err)
} fmt.Println(string(r), n) //h,1
}
func (r *Reader) Seek(offset int64, whence int) (int64, error)
根据whence来移动offset,改变指针的
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello web")
b := make([]byte, 8)
n, _ := reader.Read(b)
fmt.Println(string(b[:n])) //hello we 这个时候没有读到要读d
reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
n1, _ := reader.Read(b)
fmt.Println(string(b[:n1])) //u
}
func (r *Reader) UnreadByte() error
当前读取的位置向前移一个byte
package main import (
"fmt"
"strings"
) func main() {
reader := strings.NewReader("hello world")
b := make([]byte, 8)
n, _ := reader.Read(b)
fmt.Println(string(b[:n])) //hello wo 这个时候没有读到要读d
reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
reader.UnreadByte() //然后向前偏移1字节
n1, _ := reader.Read(b)
fmt.Println(string(b[:n1])) //ld
}
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
这个接口主要继承了io.Write的功能
package main import (
"fmt"
"os"
"strings"
) func main() {
reader := strings.NewReader("hello world")
w, _ := os.Create("test.txt")
defer w.Close()
n, err := reader.WriteTo(w)
if err != nil {
fmt.Println(err)
}
fmt.Println(n) //11
}
func NewReplacer(oldnew ...string) *Replacer NewReplacer
从列表中返回一个新的替换后的字符串,oldnew是slice
package main import (
"fmt"
"strings"
) func main() {
r := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(r.Replace("This is <b>HTML</b>!")) //This is <b>HTML</b>!
}
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
函数讲字符串替换后,然后写入w中
package main import (
"fmt"
"io/ioutil"
"os"
"strings"
) func main() {
r := strings.NewReplacer("<", "<", ">", ">")
w, _ := os.OpenFile("test1.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
defer w.Close()
n, err := r.WriteString(w, "This is <b>HTML</b>!")
if err != nil {
fmt.Println(err)
}
fmt.Println(n)
d, _ := ioutil.ReadFile("test1.txt") //32
fmt.Println(string(d)) //This is <b>HTML</b>!
}
golang之strings的更多相关文章
- 19-03【golang】strings包
golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串 Contains(s, substr stri ...
- golang学习笔记15 golang用strings.Split切割字符串
golang用strings.Split切割字符串 kv := strings.Split(authString, " ") if len(kv) != 2 || kv[0] != ...
- Golang之strings包
只列举了部分函数方法的使用: 太多了....... package main import ( "fmt" "strings" ) func main() { ...
- Golang学习 - strings 包
------------------------------------------------------------ strings 包与 bytes 包中的函数用法基本一样,不再赘述. 只对 R ...
- GoLang之strings、buffers、bytes、binary包
strings包 strings包的使用举例: package main import s "strings" import "fmt" var p = fmt ...
- golang——(strings包)常用字符串操作函数
(1)func HasPrefix(s, prefix string) bool 判断字符串s是否有前缀字符串prefix: (2)func HasSuffix(s, suffix string) b ...
- golang 中 string 转换 []byte 的一道笔试题
背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...
- Golang字符串函数认识(二)
package main import ( "fmt" "strings" ) func main(){ //返回字符在指定字符串中最后一次出现的位置 last ...
- 【Golang】字符串首字母大小写转化
写在前面 在自动化过程中,我们用得最多的可能就是字符串的处理,熟悉Python的都知道在Python中要让一个字符串的首字母大写直接用capitalize就可以了,但是同样的事情在Golang中没有这 ...
随机推荐
- Redis 字符串与哈希
/*** * 字符串 redis里的字符串 ***/ //设置key的值 redis 127.0.0.1:6379> set key 'my name is imay' //设置值的过期时间 ( ...
- win32鼠标和键盘相关函数
键盘相关函数:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645530%28v=vs.85%29.aspx 鼠标相关函数:htt ...
- 转:Excel导入SQL数据库完整代码
Excel导入SQL数据库完整代码 protected void studentload_Click(object sender, EventArgs e) {//批量添加学生信息 SqlConnec ...
- CH1801 括号画家
题意 Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号.这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号( ).中括号[ ]和大括号{ },总长度为N.这排随意绘制的括 ...
- <mvc:annotation-driven>注册了什么
前言 上一篇文章dispatcherservlet初始化中提到,如果没有配置handlermapping就会采取默认的策略进行配置handlermapping,这篇文章就要讲述mvc:annotati ...
- phoenix elixir 框架简单试用
备注: 官方提供的脚手架工具,我们可以直接使用,生成代码,同时需要nodejs 环境配置(比较简单,参考 相关资料即可) 1. 安装脚手架 mix archive.install https:/ ...
- gradle multiproject && docker build
备注: 环境准备 : docker , gradle(使用wrapper,或者全局安装),测试环境使用mac 1. gradle 安装 brew install gradle 2. docke ...
- webpack 图片资源处理
备注: css 引用图片资源 1. 安装loader yarn add file-loader --dev 2. 配置 const path = require("path"); ...
- 笔记:加密 RSA AES
笔记:加密 RSA AES RSA 是非对称加密,有公钥和私钥. RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_par ...
- C语言的补码表示和unsigned及signed的转换
这东西实际编程时一直无视的,范围小了就换个大点的表示形式,但是总觉得基础知识还是掌握得好,免得到时候用移位运算或类型转换或笔试题时要花时间想. C语言的基本类型有char.int.float.doub ...