针对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. asp.net core microservices 架构之 分布式自动计算(一)

       一:简介   自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...

  2. hadoop、storm和spark的区别、比较

    一.hadoop.Storm该选哪一个? 为了区别hadoop和Storm,该部分将回答如下问题:1.hadoop.Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什 ...

  3. idea Java spring 入门 demo

    根据这个 来实现 理解 https://www.cnblogs.com/xing901022/p/3963962.html 这里没有说如何导入包,现在我们用 idea 来实现 新建项目结构后 RUN ...

  4. 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作

    看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox( ...

  5. h5移动端flexible源码适配终端解读以及常用sass函数

    ;(function(win, lib) { var doc = win.document;// win = window,lib = window.lib; var docEl = doc.docu ...

  6. nomad 安装(单机)试用

    备注:     nomad  可以实现基础设施的调度管理,类似kubernetes ,但是在多云以及多平台支持上比较好,     还是hashicrop 工具出品的,很不错,同时本地测试因为使用默认的 ...

  7. python运算符一些注意项

    python运算符一些注意项 '/'浮点除,和'//'整除 单个'/'是浮点除,两个除号'//'是整除 整除也适用于浮点数.但是,用整除计算浮点除的结果只是在整除的结果上浮点化,比如3.6//2.1, ...

  8. How to install torcs package in Debian

    Installation instructions Installing torcs package in Debian Wheezy is as easy as running: 没想到在debia ...

  9. bzoj 3083 遥远的国度——树链剖分+线段树维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3083 int 的范围是 2^31 - 1 ,所以权值是不是爆 int 了…… O( nlog ...

  10. 模拟Linux修改实际、有效和保存设置标识

    就是模拟setuid seteuid setreuid setresuid,感觉代码比书上大段的文字好记,就写成代码形式了. // setuid.cc: 模拟<unistd.h>中的设置用 ...