文档章节

golang 字符串操作实例

黄复得
 黄复得
发布于 2014/09/13 20:46
字数 1092
阅读 20254
收藏 15

代码如下:

package main

import s "strings"

//别名
import (
	"fmt"
)

var p = fmt.Println

func main() {
	p("Contains: ", s.Contains("test", "es")) //是否包含 true
	p("Count: ", s.Count("test", "t")) //字符串出现字符的次数 2
	p("HasPrefix: ", s.HasPrefix("test", "te")) //判断字符串首部 true
	p("HasSuffix: ", s.HasSuffix("test", "st")) //判断字符串结尾 true
	p("Index: ", s.Index("test", "e")) //查询字符串位置 1
	p("Join: ", s.Join([]string{"a", "b"}, "-"))//字符串数组 连接 a-b
	p("Repeat: ", s.Repeat("a", 5)) //重复一个字符串 aaaaa
	p("Replace: ", s.Replace("foo", "o", "0", -1)) //字符串替换 指定起始位置为小于0,则全部替换 f00
	p("Replace: ", s.Replace("foo", "o", "0", 1)) //字符串替换 指定起始位置1 f0o
	p("Split: ", s.Split("a-b-c-d-e", "-")) //字符串切割 [a b c d e]
	p("ToLower: ", s.ToLower("TEST")) //字符串 小写转换 test
	p("ToUpper: ", s.ToUpper("test")) //字符串 大写转换 TEST
	p()
	p("Len: ", len("hello")) //字符串长度
	p("Char:", "hello"[1]) //标取字符串中的字符,类型为byte
}



详细用法如下:

package main

import (
	"fmt"
	"strings"
	//"unicode/utf8"
)

func main() {
	fmt.Println("查找子串是否在指定的字符串中")
	fmt.Println(" Contains 函数的用法")
	fmt.Println(strings.Contains("seafood", "foo")) //true
	fmt.Println(strings.Contains("seafood", "bar")) //false
	fmt.Println(strings.Contains("seafood", "")) //true
	fmt.Println(strings.Contains("", "")) //true 这里要特别注意
	fmt.Println(strings.Contains("我是中国人", "我")) //true

	fmt.Println("")
	fmt.Println(" ContainsAny 函数的用法")
	fmt.Println(strings.ContainsAny("team", "i")) // false
	fmt.Println(strings.ContainsAny("failure", "u & i")) // true
	fmt.Println(strings.ContainsAny("foo", "")) // false
	fmt.Println(strings.ContainsAny("", "")) // false

	fmt.Println("")
	fmt.Println(" ContainsRune 函数的用法")
	fmt.Println(strings.ContainsRune("我是中国", '我')) // true 注意第二个参数,用的是字符

	fmt.Println("")
	fmt.Println(" Count 函数的用法")
	fmt.Println(strings.Count("cheese", "e")) // 3
	fmt.Println(strings.Count("five", "")) // before & after each rune result: 5 , 源码中有实现

	fmt.Println("")
	fmt.Println(" EqualFold 函数的用法")
	fmt.Println(strings.EqualFold("Go", "go")) //大小写忽略

	fmt.Println("")
	fmt.Println(" Fields 函数的用法")
	fmt.Println("Fields are: %q", strings.Fields(" foo bar baz ")) //["foo" "bar" "baz"] 返回一个列表

	//相当于用函数做为参数,支持匿名函数
	for _, record := range []string{" aaa*1892*122", "aaataat", "124|939|22"} {
		fmt.Println(strings.FieldsFunc(record, func(ch rune) bool {
				switch {
				case ch > '5':
					return true
				}
				return false
			}))
	}

	fmt.Println("")
	fmt.Println(" HasPrefix 函数的用法")
	fmt.Println(strings.HasPrefix("NLT_abc", "NLT")) //前缀是以NLT开头的

	fmt.Println("")
	fmt.Println(" HasSuffix 函数的用法")
	fmt.Println(strings.HasSuffix("NLT_abc", "abc")) //后缀是以NLT开头的

	fmt.Println("")
	fmt.Println(" Index 函数的用法")
	fmt.Println(strings.Index("NLT_abc", "abc")) // 返回第一个匹配字符的位置,这里是4
	fmt.Println(strings.Index("NLT_abc", "aaa")) // 在存在返回 -1
	fmt.Println(strings.Index("我是中国人", "中")) // 在存在返回 6

	fmt.Println("")
	fmt.Println(" IndexAny 函数的用法")
	fmt.Println(strings.IndexAny("我是中国人", "中")) // 在存在返回 6
	fmt.Println(strings.IndexAny("我是中国人", "和")) // 在存在返回 -1

	fmt.Println("")
	fmt.Println(" Index 函数的用法")
	fmt.Println(strings.IndexRune("NLT_abc", 'b')) // 返回第一个匹配字符的位置,这里是4
	fmt.Println(strings.IndexRune("NLT_abc", 's')) // 在存在返回 -1
	fmt.Println(strings.IndexRune("我是中国人", '中')) // 在存在返回 6

	fmt.Println("")
	fmt.Println(" Join 函数的用法")
	s := []string{"foo", "bar", "baz"}
	fmt.Println(strings.Join(s, ", ")) // 返回字符串:foo, bar, baz

	fmt.Println("")
	fmt.Println(" LastIndex 函数的用法")
	fmt.Println(strings.LastIndex("go gopher", "go")) // 3

	fmt.Println("")
	fmt.Println(" LastIndexAny 函数的用法")
	fmt.Println(strings.LastIndexAny("go gopher", "go")) // 4
	fmt.Println(strings.LastIndexAny("我是中国人", "中")) // 6

	fmt.Println("")
	fmt.Println(" Map 函数的用法")
	rot13 := func(r rune) rune {
		switch {
		case r >= 'A' && r <= 'Z':
			return 'A' + (r-'A'+13)%26
		case r >= 'a' && r <= 'z':
			return 'a' + (r-'a'+13)%26
		}
		return r
	}
	fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))

	fmt.Println("")
	fmt.Println(" Repeat 函数的用法")
	fmt.Println("ba" + strings.Repeat("na", 2)) //banana

	fmt.Println("")
	fmt.Println(" Replace 函数的用法")
	fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
	fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))

	fmt.Println("")
	fmt.Println(" Split 函数的用法")
	fmt.Printf("%qn", strings.Split("a,b,c", ","))
	fmt.Printf("%qn", strings.Split("a man a plan a canal panama", "a "))
	fmt.Printf("%qn", strings.Split(" xyz ", ""))
	fmt.Printf("%qn", strings.Split("", "Bernardo O'Higgins"))

	fmt.Println("")
	fmt.Println(" SplitAfter 函数的用法")
	fmt.Printf("%qn", strings.SplitAfter("/home/m_ta/src", "/")) //["/" "home/" "m_ta/" "src"]

	fmt.Println("")
	fmt.Println(" SplitAfterN 函数的用法")
	fmt.Printf("%qn", strings.SplitAfterN("/home/m_ta/src", "/", 2)) //["/" "home/m_ta/src"]
	fmt.Printf("%qn", strings.SplitAfterN("#home#m_ta#src", "#", -1)) //["/" "home/" "m_ta/" "src"]

	fmt.Println("")
	fmt.Println(" SplitN 函数的用法")
	fmt.Printf("%qn", strings.SplitN("/home/m_ta/src", "/", 1))

	fmt.Printf("%qn", strings.SplitN("/home/m_ta/src", "/", 2)) //["/" "home/" "m_ta/" "src"]
	fmt.Printf("%qn", strings.SplitN("/home/m_ta/src", "/", -1)) //["" "home" "m_ta" "src"]
	fmt.Printf("%qn", strings.SplitN("home,m_ta,src", ",", 2)) //["/" "home/" "m_ta/" "src"]

	fmt.Printf("%qn", strings.SplitN("#home#m_ta#src", "#", -1)) //["/" "home/" "m_ta/" "src"]

	fmt.Println("")
	fmt.Println(" Title 函数的用法") //这个函数,还真不知道有什么用
	fmt.Println(strings.Title("her royal highness"))

	fmt.Println("")
	fmt.Println(" ToLower 函数的用法")
	fmt.Println(strings.ToLower("Gopher")) //gopher

	fmt.Println("")
	fmt.Println(" ToLowerSpecial 函数的用法")

	fmt.Println("")
	fmt.Println(" ToTitle 函数的用法")
	fmt.Println(strings.ToTitle("loud noises"))
	fmt.Println(strings.ToTitle("loud 中国"))

	fmt.Println("")
	fmt.Println(" Replace 函数的用法")
	fmt.Println(strings.Replace("ABAACEDF", "A", "a", 2)) // aBaACEDF
	//第四个参数小于0,表示所有的都替换, 可以看下golang的文档
	fmt.Println(strings.Replace("ABAACEDF", "A", "a", -1)) // aBaaCEDF

	fmt.Println("")
	fmt.Println(" ToUpper 函数的用法")
	fmt.Println(strings.ToUpper("Gopher")) //GOPHER

	fmt.Println("")
	fmt.Println(" Trim 函数的用法")
	fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! ")) // ["Achtung"]

	fmt.Println("")
	fmt.Println(" TrimLeft 函数的用法")
	fmt.Printf("[%q]", strings.TrimLeft(" !!! Achtung !!! ", "! ")) // ["Achtung !!! "]

	fmt.Println("")
	fmt.Println(" TrimSpace 函数的用法")
	fmt.Println(strings.TrimSpace(" tn a lone gopher ntrn")) // a lone gopher

}



本文转载自:http://www.111cn.net/sys/linux/52349.htm

黄复得

黄复得

粉丝 14
博文 52
码字总数 6032
作品 0
福州
高级程序员
私信 提问
golang 高效字符串拼接

golang 高效字符串拼接 It event poll2016-03-28545 阅读 golang字符串 虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式。 一个有效的方式是准备好一个字符...

It event poll
2016/03/28
0
0
Golang学习笔记目录

Golang 介绍 Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。...

ChainZhang
2017/12/26
0
0
golang cgo 使用总结(一)

CGO 提供了 golang 和 C 语言相互调用的机制。某些第三方库可能只有 C/C++ 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了。可以通 CGO 在 golang 在调用 C 的接口,...

echojson
04/18
87
1
golang操作Redis(redigo基础篇)

现在的redis大红大紫,而且很多应用场景都适合使用Reids来做缓存或者直接做存储,典型的如mysql前端缓存、手游里面的排行榜等。那么我们怎样用golang来操作redis呢? 熟悉redis的同学,肯定第...

gotaly
2014/08/21
0
0
《Golang 入门系列三》Golang fmt格式“占位符”

前言:本文主要介绍Golang的fmt占位符,使用的时候会经常用到,方便查阅 golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 定义示例类型和变量: 普通占位符: 布尔占位符:...

IT--小哥
2018/02/17
105
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
16分钟前
11
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
17分钟前
11
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
21分钟前
10
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
30分钟前
11
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
32分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部