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中没有这 ...
随机推荐
- 为iPhone 6设计自适应布局(iOS8)
Apple从iOS 6加入了Auto Layout后开始就比较委婉的开始鼓励.建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心 ...
- python笔记-19 javascript补充、web框架、django基础
一.JavaScript的补充 1 正则表达式 1.1 test的使用 test 测试是否符合条件 返回true or false 1.2 exec的使用 exec 从字符串中截取匹配的字符 1.3 ...
- php excel 读取日期问题
在 php excel 读取 xls 格式的文件时,xls 上面显示的是正常的日期格式 但是读取出来的话,就会是一个万位整形数据,这显然不是我们想要的日期 读取出来的结果: 41807 $t = 41 ...
- 微信小程序(3)——常用的组件
view: view是小程序中的视图容器之一,似于html中的<div>标签 <view class="section"> <view class=& ...
- HTML CSS 表格换行禁止 超出指定长度自动截断
word-break:keep-all; white-space:nowrap; overflow:hidden; min-width:30px; max-width:100px;
- 关于altera fpga的io时序优化问题
chip planner中一个io的结构如下图所示 其中左边是输出部分右边是输入部分,但是会注意到两个结构:1,寄存器,2,delay模块 以下是我的推测:这两个结构是为了做时序优化时用的,在alte ...
- 【最全 干货 实例】 缓存手册(Memcached、redis、RabbitMQ)
http://www.cnblogs.com/suoning/p/5807247.html 本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 re ...
- sqlopsstudio 微软开源跨平台sql server 连接工具
sqlopsstudio 微软开源的sql server 连接工具,跨平台,基于vscode 分之代码. 项目地址: https://github.com/Microsoft/sqlopsstudi ...
- FileStream读写文件
读文件示例 try { // 打开文件 FileStream fs = new FileStream("D:\\not.txt", FileMode.Open, FileAcces ...
- c# String.Split数组省去空字符
public static void test() { string txt = "hi[#b1.jpg][#b4.jpg]few[#b1-3.jpg]"; txt = " ...