GoWeb教程_07.6. 字符串处理

字符串在我们平常的 Web 开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作,本小节将通过 Go 标准库中的 strings 和 strconv 两个包中的函数来讲解如何进行有效快速的操作。

字符串操作

下面这些函数来自于 strings 包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。

  • func Contains(s, substr string) bool

    字符串 s 中是否包含 substr,返回 bool 值

fmt.Println(strings.Contains("seafood", "foo"))
fmt.Println(strings.Contains("seafood", "bar"))
fmt.Println(strings.Contains("seafood", ""))
fmt.Println(strings.Contains("", ""))
// Output:
// true
// false
// true
// true
  • func Join(a []string, sep string) string

    字符串链接,把 slice a 通过 sep 链接起来

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
// Output:foo, bar, baz
  • func Index(s, sep string) int

    在字符串 s 中查找 sep 所在的位置,返回位置值,找不到返回 -1

fmt.Println(strings.Index("chicken", "ken"))
fmt.Println(strings.Index("chicken", "dmr"))
//Output:4
//-1
  • func Repeat(s string, count int) string

    重复 s 字符串 count 次,最后返回重复的字符串

fmt.Println("ba" + strings.Repeat("na", 2))
// Output:banana
  • func Replace(s, old, new string, n int) string

    在 s 字符串中,把 old 字符串替换为 new 字符串,n 表示替换的次数,小于 0 表示全部替换

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))
// Output:oinky oinky oink
// moo moo moo
  • func Split(s, sep string) []string

    把 s 字符串按照 sep 分割,返回 slice

fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
// Output:["a" "b" "c"]
// ["" "man " "plan " "canal panama"]
// [" " "x" "y" "z" " "]
// [""]
  • func Trim(s string, cutset string) string

    在 s 字符串的头部和尾部去除 cutset 指定的字符串

fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! "))
// Output:["Achtung"]
  • func Fields(s string) []string

    去除 s 字符串的空格符,并且按照空格分割返回 slice

fmt.Printf("Fields are: %q", strings.Fields("  foo bar  baz   "))
// Output:Fields are: ["foo" "bar" "baz"]

字符串转换

字符串转化的函数在 strconv 中,如下也只是列出一些常用的:

  • Append 系列函数将整数等转换为字符串后,添加到现有的字节数组中。
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := make([]byte, 0, 100)
    str = strconv.AppendInt(str, 4567, 10)
    str = strconv.AppendBool(str, false)
    str = strconv.AppendQuote(str, "abcdefg")
    str = strconv.AppendQuoteRune(str, '单')
    fmt.Println(string(str))
}
  • Format 系列函数把其他类型的转换为字符串
package main

import (
    "fmt"
    "strconv"
)

func main() {
    a := strconv.FormatBool(false)
    b := strconv.FormatFloat(123.23, 'g', 12, 64)
    c := strconv.FormatInt(1234, 10)
    d := strconv.FormatUint(12345, 10)
    e := strconv.Itoa(1023)
    fmt.Println(a, b, c, d, e)
}
  • Parse 系列函数把字符串转换为其他类型
package main

import (
    "fmt"
    "strconv"
)
func checkError(e error){
    if e != nil{
        fmt.Println(e)
    }
}
func main() {
    a, err := strconv.ParseBool("false")
    checkError(err)
    b, err := strconv.ParseFloat("123.23", 64)
    checkError(err)
    c, err := strconv.ParseInt("1234", 10, 64)
    checkError(err)
    d, err := strconv.ParseUint("12345", 10, 64)
    checkError(err)
    e, err := strconv.Atoi("1023")
    checkError(err)
    fmt.Println(a, b, c, d, e)
}
Image placeholder
stuart
未设置
  0人点赞

没有讨论,发表一下自己的看法吧

推荐文章
GoWeb教程_07.0. 文本处理

Web开发中对于文本处理是非常重要的一部分,我们往往需要对输出或者输入的内容进行处理,这里的文本包括字符串、数字、Json、XMl等等。Go语言作为一门高性能的语言,对这些文本的处理都有官方的标准库来

GoWeb教程_07.2. JSON 处理

JSON(JavascriptObjectNotation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言

GoWeb教程_07.4. 模板处理

什么是模板 你一定听说过一种叫做MVC的设计模式,Model处理数据,View展现结果,Controller控制用户的请求,至于View层的处理,在很多动态语言里面都是通过在静态HTML中插入动态语言

GoWeb教程_07.5. 文件操作

在任何计算机设备中,文件是都是必须的对象,而在Web编程中,文件的操作一直是Web程序员经常遇到的问题,文件操作在Web应用中是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在

GoWeb教程_07.7. 小结

这一章给大家介绍了一些文本处理的工具,包括XML、JSON、正则和模板技术,XML和JSON是数据交互的工具,通过XML和JSON你可以表达各种含义,通过正则你可以处理文本(搜索、替换、截取),通过模

GoWeb教程_08.0. Web 服务

Web服务可以让你在HTTP协议的基础上通过XML或者JSON来交换信息。如果你想知道上海的天气预报、中国石油的股价或者淘宝商家的一个商品信息,你可以编写一段简短的代码,通过抓取这些信息然后通过标准的

GoWeb教程_08.2. WebSocket

WebSocket是HTML5的重要特性,它实现了基于浏览器的远程socket,它使浏览器和服务器可以进行全双工通信,许多浏览器(Firefox、GoogleChrome和Safari)都已对此做了支

GoWeb教程_04.5. 处理文件上传

你想处理一个由用户上传的文件,比如你正在建设一个类似Instagram的网站,你需要存储用户拍摄的照片。这种需求该如何实现呢? 要使表单能够上传文件,首先第一步就是要添加form的enctype属性,

GoWeb教程_ 07.1. XML 处理

XML作为一种数据交换和信息传递的格式已经十分普及。而随着Web服务日益广泛的应用,现在XML在日常的开发工作中也扮演了愈发重要的角色。这一小节,我们将就Go语言标准包中的XML相关处理的包进行介绍。

GoWeb教程_ 07.3. 正则处理

正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符

GoWeb教程_05.5. 使用 Beego orm 库进行 ORM 开发

beegoorm是我开发的一个Go进行ORM操作的库,它采用了Gostyle方式对数据库进行操作,实现了struct到数据表记录的映射。beegoorm是一个十分轻量级的GoORM框架,开发这个库的本

GoWeb教程_06.2. Go 如何使用 session

通过上一小节的介绍,我们知道session是在服务器端实现的一种用户和服务器之间认证的解决方案,目前Go标准包没有为session提供任何支持,这小节我们将会自己动手来实现go版本的session管理

GoWeb教程_05.0 访问数据库

对许多Web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息、产品目录或者新闻列表等。 Go没有内置的驱动支持任何的数据库,但是Go定义了databas

GoWeb教程_05.1. database/sql 接口

Go与PHP不同的地方是Go官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要是按照标准接口开发的代码,以后需要迁移

GoWeb教程_05.4. 使用 PostgreSQL 数据库

PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如MySQL和Firebird),和对专有系统比如

GoWeb教程_05.6. NOSQL 数据库操作

NoSQL(NotOnlySQL),指的是非关系型的数据库。随着Web2.0的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,

GoWeb教程_06.0. session 和数据存储

Web开发中一个很重要的议题就是如何做好用户的整个浏览过程的控制,因为HTTP协议是无状态的,所以用户的每一次请求都是无状态的,我们不知道在整个Web操作过程中哪些连接与该用户有关,我们应该如何来解决

GoWeb教程_06.1. session 和 cookie

session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在浏览需要认证的服务页面以及页面统计中却相当关键。我们先来了解一下session和cookie怎么来的?考

GoWeb教程_06.3. session 存储

上一节我们介绍了Session管理器的实现原理,定义了存储session的接口,这小节我们将示例一个基于内存的session存储接口的实现,其他的存储方式,读者可以自行参考示例来实现,内存的实现请看下

GoWeb教程_06.4. 预防 session 劫持

session劫持是一种广泛存在的比较严重的安全威胁,在session技术中,客户端和服务端通过session的标识符来维护会话,但这个标识符很容易就能被嗅探到,从而被其他人利用。它是中间人攻击的一种

GoWeb教程_06.5. 小结

这章我们学习了什么是session,什么是cookie,以及他们两者之间的关系。但是目前Go官方标准包里面不支持session,所以我们设计了一个session管理器,实现了session从创建到销毁

GoWeb教程_08.1. Socket 编程

在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和W

GoWeb教程_08.3. REST

RESTful,是目前最为流行的一种互联网软件架构。因为它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。本小节我们将来学习它到底是一种什么样的架构?以及在Go里面如何来实现它。

GoWeb教程_08.4. RPC

前面几个小节我们介绍了如何基于Socket和HTTP来编写网络应用,通过学习我们了解了Socket和HTTP采用的是类似"信息交换"模式,即客户端发送一条信息到服务端,然后(一般来说)服务器端都会返回

GoWeb教程_08.5. 小结

这一章我们介绍了目前流行的几种主要的网络应用开发方式,第一小节介绍了网络编程中的基础:Socket编程,因为现在网络正在朝云的方向快速进化,作为这一技术演进的基石的的socket知识,作为开发者的你,