针对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的更多相关文章

  1. 19-03【golang】strings包

    golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串   Contains(s, substr stri ...

  2. golang学习笔记15 golang用strings.Split切割字符串

    golang用strings.Split切割字符串 kv := strings.Split(authString, " ") if len(kv) != 2 || kv[0] != ...

  3. Golang之strings包

    只列举了部分函数方法的使用: 太多了....... package main import ( "fmt" "strings" ) func main() { ...

  4. Golang学习 - strings 包

    ------------------------------------------------------------ strings 包与 bytes 包中的函数用法基本一样,不再赘述. 只对 R ...

  5. GoLang之strings、buffers、bytes、binary包

    strings包 strings包的使用举例: package main import s "strings" import "fmt" var p = fmt ...

  6. golang——(strings包)常用字符串操作函数

    (1)func HasPrefix(s, prefix string) bool 判断字符串s是否有前缀字符串prefix: (2)func HasSuffix(s, suffix string) b ...

  7. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  8. Golang字符串函数认识(二)

    package main import ( "fmt" "strings" ) func main(){ //返回字符在指定字符串中最后一次出现的位置 last ...

  9. 【Golang】字符串首字母大小写转化

    写在前面 在自动化过程中,我们用得最多的可能就是字符串的处理,熟悉Python的都知道在Python中要让一个字符串的首字母大写直接用capitalize就可以了,但是同样的事情在Golang中没有这 ...

随机推荐

  1. 让一个 csproj 项目指定多个开发框架

    可移植类库.共享项目..NET Standard 项目都能够帮我们完成跨多个 .NET SDK 的单一项目开发,但它们的跨 SDK 开发都有些限制.现在,我们又有新的方式能够跨多个 .NET SDK ...

  2. 《selenium2 python 自动化测试实战》(4)——鼠标事件

    鼠标事件包含在ActionChains类中,导入时只需要: from selenium.webdriver.common.action_chains import ActionChains 导入类即可 ...

  3. 关于Visual studio 2017安装方法的若干问题

    因为忙于生活,好几年没有看关于编程方面的书了,这几天闲,就准备在电脑上装上VS的最新版本,查了查,最新版是VS2017,.搜了下网上安装后大小,还真不小.下载离线安装包,完全下载居然需要25G左右,无 ...

  4. 使用npm link 创建本地模块

    1. npm link 介绍 创建一个全局的符号链接,优点是方便我们进行本地node模块的开发调用,和后期发布私服,或者npm 仓库调用是一致的 以下为官方的说明: First, npm link i ...

  5. 让nodejs 支持 es6 import

    备注:    尽管nodejs 新版本已经支持es6 的好多特性了,但是还是有部分不支持,为了使用,实际上我们有一个 比较强大工具 bable,下面介绍几个比较简单的用法. 1. bable-cli ...

  6. Google Chrome 调试JS简单教程[更新]

    题外话,刚开始我写这篇内容只是将自己了解的一些知识放上来,不巧的是我分析了我的来访日志,很多朋友都有这个需求,为了大家没有白来,我决定充实下这篇文章.最近更新时间2014-02-14 chrome版本 ...

  7. [LeetCode系列]3元素最近和问题的O(n^2)解法

    给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的. 解法思路参考: Finding thr ...

  8. fail2ban的介绍

    fail2ban的介绍 http://www.jb51.net/article/48591.htm http://lilinji.blog.51cto.com/5441000/1784726 fail ...

  9. ubuntu 修改分辨率为自定义分辨率

    在ubuntu14.04虚拟机上修改自定义大小的桌面屏幕分辨率,使用的命令:cvt,xrandr 0.首先查看下当前已经提供的分辨率设置:xrandr -q root@xxx:/home/xxx/De ...

  10. JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)

    Unit03: SQL(基础查询) . SQL(关联查询) 列别名 当SELECT子句中查询的列是一个函数 或者表达式时,那么查询出来的结果集 中对应的该字段的名字就是这个函数或者 表达式的名字.为此 ...