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中没有这 ...
随机推荐
- BZOJ2705 SDOI2012 Longge的问题 【欧拉函数】
BZOJ2705 SDOI2012 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, ...
- Buy Tickets(线段树单点更新,逆向思维)
题目大意:有n个的排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos.要求把队伍最后的状态输出. 个人心得:哈哈,用链表写了下,果不其然超时了,后面转念一想要用静态数组 ...
- Flask第二篇——服务器相关
web服务器.应用服务器和web应用框架 web服务器:负责处理http请求.响应静态文件,常见的有Apache,Nginx以及微软的IIS 应用服务器:负责处理逻辑的服务器.比如php.python ...
- Windows常用配置和sublime快捷键
常用配置和快捷键 1.操作系统常用配置 (1)系统调整为最佳性能 (2)文件夹显示设置:显示文件类型.显示路径 (3)任务栏设置:锁定任务栏+使用小图标2.操作系统常用快捷键 win+数字键--快速打 ...
- BZOJ4543 [POI2014]Hotel加强版
题意 有一个树形结构,每条边的长度相同,任意两个节点可以相互到达.选3个点.两两距离相等.有多少种方案? 数据范围:n<=100000 分析 参照小蒟蒻yyb的博客. 我们先考虑一个\(O(n^ ...
- np.random 的使用
random 有很多地方会用到. 参考这篇: http://www.cnblogs.com/CheeseZH/p/4593349.html
- filter异常捕捉
jsp中抛出一个异常 <% String action = request.getParameter("action"); if ("accountExceptio ...
- Zend Studio 下载
http://www.52pojie.cn/thread-507229-1-1.html THINKPHP : http://www.cnblogs.com/TigerYangWTH/p/57250 ...
- Python——while、continue、break、while-else、or、and、not
1. while 终止while循环: (1) 改变条件,使其不成立 (2) break 应用实例1:计算1+2+3+...+100 #1.使用两个变量 count = 1 sum = 0 while ...
- Error[Li006]: duplicate definitions for "******"
今天参考别人程序写程序时出现Error[Li006]: duplicate definitions for "******". 参考程序中将变量和数据定义在(.h)文件中,我也就直 ...