iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Go语言 strings包NewReader方法及ReadRune查找字符串
  • 735
分享到

Go语言 strings包NewReader方法及ReadRune查找字符串

2024-04-02 19:04:59 735人浏览 安东尼
摘要

一、函数说明 strings.NewReader创建一个从s读取数据的Reader type Reader struct { s string //对应的字符串 i int64 // 当前读取到的位置 p

一、函数说明

strings.NewReader创建一个从s读取数据的Reader

type Reader struct {
	s        string //对应的字符串
	i        int64  // 当前读取到的位置
	prevRune int   
}
// 读取器实了 io.Reader, io.ReaderAt, io.Seeker, io.WriterTo,
// io.ByteScanner, 和 io.RuneScanner 通过从字符串中读取
// Reader的零值类似于空字符串的读取器
type Reader struct {
	s        string // 对应的字符串
	i        int64 // 当前读取到的位置
	prevRune int   // prevRune索引; or < 0
}

二、相关方法

2.1 ReadByte

func (r *Reader) ReadByte() (byte, error)

  • ReadByte 从 r *Reader 中读出一个字节并返回
  • 如果 r *Reader 中无可读数据,则返回一个错误

2.2 UnreadByte

func (r *Reader) UnreadByte() error

  • UnreadByte 撤消最后一次读出的字节
  • 只有最后读出的字节可以被撤消
  • 只要有内容被读出,就可以用 UnreadByte 撤消读出的一个字节
    func (r *Reader) ReadByte() (byte, error)

代码示例:

    read := strings.NewReader("abcd")
    c, _ := read.ReadByte()
    fmt.Printf("%c\n", c) // a
    c, _ = read.ReadByte()
    fmt.Printf("%c\n", c) // b

    _ = read.UnreadByte()
    c, _ = read.ReadByte() // b
    fmt.Printf("%c\n", c)

2.3 ReadRune

方法说明
func (r *Reader) ReadRune() (ch rune, size int, err error)

  • ReadRune 从 r *Reader 中读出一个 UTF8 编码的字符串并返回第一个参数 ch rune
  • 同时返回该字符的 UTF8 编码长度,返回的第二个参数 size int,如果发生错误,第三个参数即错误 err error
  • 如果 UTF8 序列无法解码出一个正确的 Unicode 字符,只读出 r *Reader 中的一个字节,并返回 ch = U+FFFD 字符,size = 1

2.4 UnreadRune

func (r *Reader) UnreadRune() error

  • UnreadRune 撤消最后一次读出的 Unicode 字符
  • 如果最后一次执行的不是 ReadRune 操作,则返回一个错误
  • 因此 UnreadRuneUnreadByte 更加严格

代码示例:

    reader := strings.NewReader("你好,世界!")
    s, size, _ := reader.ReadRune()
    fmt.Printf("%c %v \n", s, size) // 你 3

    _ = reader.UnreadRune()
    s, size, _ = reader.ReadRune()
    fmt.Printf("%c %v \n", s, size) // 你 3

三、查询UTF-8字符位置

实现类似于 PHPmb_strpos 函数:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(mb_strpos("聚合数据科技公司", "科技")) // 4
    fmt.Println(mb_strpos("聚合数据--科技公司", "科技")) // 6
    fmt.Println(mb_strpos("juhe聚合数据-科技公司", "数据")) // 6
}

func mb_strpos(haystack, needle string) int {
    index := strings.Index(haystack, needle)
    if index == -1 || index == 0 {
        return index
    }
    pos := 0
    total := 0
    reader := strings.NewReader(haystack)
    for {
        _, size, err := reader.ReadRune()
        if err != nil {
            return -1
        }
        total += size
        pos++
        // Got it
        if total == index {
            return pos
        }
    }
}

推荐查询 php 转 Go 函数的工具https://php2golang.com

--结束END--

本文标题: Go语言 strings包NewReader方法及ReadRune查找字符串

本文链接: https://www.lsjlt.com/news/99265.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言 strings包NewReader方法及ReadRune查找字符串
    一、函数说明 strings.NewReader创建一个从s读取数据的Reader type Reader struct { s string //对应的字符串 i int64 // 当前读取到的位置 p...
    99+
    2024-04-02
  • c语言查找字符串指定字符的方法
    小编给大家分享一下c语言查找字符串指定字符的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器...
    99+
    2023-06-14
  • GO语言字符串处理Strings包的函数怎么使用
    这篇文章主要介绍了GO语言字符串处理Strings包的函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇GO语言字符串处理Strings包的函数怎么使用文章都会有所收获,下面我们一起来看看吧。常用的字符...
    99+
    2023-06-30
  • GO语言字符串处理Strings包的函数使用示例讲解
    目录常用的字符串处理函数(1) Contains(2) Join(3) Index(4) Repeat(5) Replace(6) Split(7) Trim(8) Fields字符...
    99+
    2024-04-02
  • go语言删除字符串字符的方法介绍
    今天小编给大家分享的是go语言删除字符串字符的方法介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。   删除字符串的方法:1、用TrimSpace()...
    99+
    2023-07-04
  • c语言怎么查找字符串中指定字符
    在C语言中,可以使用strchr()函数来查找字符串中指定的字符。该函数的原型为: char *strchr(const char ...
    99+
    2024-04-02
  • Go语言字符串截取方法详解
    Go语言字符串截取方法详解 在Go语言中,字符串是不可变的字节序列,因此在进行字符串截取时需要使用一些方法来实现。字符串截取是获取字符串中的特定部分的一种常见操作,可以根据需求截取字符...
    99+
    2024-03-13
    字符串 go语言 截取
  • Java字符串查找(3种方法)
    在给定的字符串中查找字符或字符串是比较常见的操作。字符串查找分为两种形式:一种是在字符串中获取匹配字符(串)的索引值,另一种是在字符串中获取指定索引位置的字符。 根据字符查找 String 类的 indexOf() 方法和 lastln...
    99+
    2023-10-11
    开发语言 Powered by 金山文档
  • Python3中字符串的常用操作方法及查找方法
    目录一·字符串的介绍二·字符串的查找方法一·字符串的介绍 首先我们得先了解什么是字符串,字符串是python中最为常见的数据类型,我们一般使...
    99+
    2024-04-02
  • go语言字符串拼接的方法是什么
    在Go语言中,可以使用`+`运算符或`fmt.Sprintf()`函数来进行字符串拼接。1. 使用`+`运算符```gostr1 :...
    99+
    2023-09-27
    go语言
  • Go语言中的字符串拼接方法详情
    目录1、string类型2、strings包 2.1 strings.Builder类型2.2 strings.Reader类型3、bytes.Buffer3.1 bytes.Buf...
    99+
    2024-04-02
  • sqlite查找字符串的方法是什么
    在SQLite中查找字符串可以使用通配符和LIKE关键字来进行模糊匹配。例如,可以使用以下查询来查找包含特定字符串的记录: SELE...
    99+
    2024-04-09
    sqlite
  • Go 语言编程技巧:删除字符串的方法
    Go 语言编程技巧:删除字符串的方法 在使用 Go 语言编程时,经常会遇到需要删除字符串中特定内容的情况。本文将介绍一些在 Go 语言中实现删除字符串的方法,并提供具体的代码示例。 方...
    99+
    2024-04-02
  • Java数组与列表查找及字符串转换的方法
    今天小编给大家分享一下Java数组与列表查找及字符串转换的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目一解法cla...
    99+
    2023-06-29
  • GO语言字符串转义及反转义技巧
    go 语言中,转义字符用于表示特殊字符或控制字符串,其用法为反斜杠后跟字符,反转义字符则用于恢复转义字符的原始形式。常用的转义字符包括:\ 反斜杠\' 单引号\" 双引号\n ...
    99+
    2024-04-08
    字符串转义 字符串反转义 go语言
  • Go语言中高效的字符串拼接方法分享
    Go语言是一门开源编程语言,由Google开发,具有高性能和简洁的特点。在Go语言中,字符串拼接是一项常见的操作。本文将分享一些高效的字符串拼接方法,帮助Go语言开发者提高代码的性能和...
    99+
    2024-03-12
    字符串 高效 拼接 go语言
  • C语言进阶之字符串查找库函数详解
    目录strstrstrtok总结strstr 查找strstr的文档,可知它的原型为: char *strstr( const char *string, const char *s...
    99+
    2023-01-28
    C语言字符串查找函数 用c语言实现字符串的查找 c语言查找字符串
  • Linux系统vi查找字符串方法是什么
    今天就跟大家聊聊有关Linux系统vi查找字符串方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。vi编辑器简介:vi编辑器通常被简称为vi,而vi又是visual edito...
    99+
    2023-06-28
  • C语言中字符串的定义方法
    本篇内容介绍了“C语言中字符串的定义方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Go语言中实现字符串转数组的方法有哪些?
    Go语言作为一门非常流行的编程语言,在处理字符串和数组之间的转换时提供了许多方便的方法。下面我们将介绍一些常用的方法,包括具体的代码示例。 方法一:使用strings包的Split方法...
    99+
    2024-03-12
    分割 切片 转换 go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作