Golang中操作字符串

本文介绍了Golang中使用`strings`包进行字符串操作的方法,包括判断前缀/后缀、子字符串查找、替换、修剪、分割、拼接,以及通过`strconv`包进行字符串与数字之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang中使用strings包完成对字符串的主要操作。

判断前缀/后缀
strings.HasPrefix(s, prefix string) bool	//判断字符串s是否以字符串prefix作为开头,返回值为bool
strings.HasSuffix(s, suffix string) bool	//判断字符串s是否以字符串suffix作为结尾,返回值为bool
//模拟实现
package MyStrings

//判断s字符串是否以prefix作为开头
func MyHasPrefix(s, prefix string) bool {
	if len(s) <= 0 || len(prefix) <= 0 {
		panic("str null")
	}

	if len(prefix) > len(s) {
		return false
	}

	for k, _ := range prefix {
		if s[k] != prefix[k] {
			return false
		}
	}
	return true
}
//模拟实现
package MyStrings


//go反转字符串
func reverse(s string)string {
	if len(s) <= 0 {
		panic("str null")
	}

	runes := []rune(s)
	for begin, end := 0, len(s) - 1; begin < end ;begin, end = begin + 1, end - 1 {
		runes[begin], runes[end] = runes[end], runes[begin]
	}
	return string(runes)
}

//同一个包中的public函数可以互相调用,不需要加上包名,也不需要import当前包
func MyHasSuffix(s, suffix string) bool {
	if len(s) <= 0 || len(suffix) <= 0 {
		panic("str null")
	}

	var restr string = reverse(s)
	var resuffix string = reverse(suffix)
	return MyHasPrefix(restr, resuffix)
}

判断子字符串
strings.Contains(s, substr string) bool	//判断substr是否为s的子字符串
//模拟实现
package MyStrings

//判断字符串的包含关系,判断substr
func MyContains(s, substr string)bool {
	if len(s) <= 0 || len(substr) <= 0 {
		panic("str null")
	}

	if i:= MyIndex(s, substr); i == -1 {
		return false
	}
	return true
}

判断子字符串或字符在父字符串中出现的位置
strings.Index(s, str string) int	//返回str在s中第一次出现的位置,若找到,返回值为开始位置的下标;若未找到,返回值为-1
strings.LastIndex(s, str string) int	//返回str在s中最后一次出现的位置
strings.IndexRune(s string, r rune) int	//TODO
//模拟实现
package MyStrings

//返回str中第一个匹配s的首字符的位置
func MyIndex(s, str string) int {
	//s&str都不能为空
	if len(s) <= 0 || len(str) <= 0 {
		panic("str null")
	}

	var startpos int	//在s字符串中起始的比较位置
	var compos int	//s字符串中,开始与str比较的位置
	var strpos int	//表示str对应位置
	for startpos = 0;startpos < len(s);startpos++ {
		if s[startpos] == str[0] {	//找到第一个匹配字符,保存该位置,开始向后比较
			compos = startpos
			strpos = 0

			//开始比较s&str
			for ;strpos < len(str); compos, strpos = compos + 1, strpos + 1 {
				if compos >= len(s) {	//判断compos是否越界,越界说明无匹配字符串
					return -1
				}
				if s[compos] != str[strpos] {
					break
				}
			}

			if strpos == len(str)  {	//匹配字符串完成
				return startpos
			}
		}
	}
	return -1
}
//模拟实现
package MyStrings

func MyLastIndex(s, str string)int {
	if len(s) <= 0 || len(str) <= 0 {
		panic("str null")
	}

	var res string = reverse(s)
	var restr string = reverse(str)
	var pos int = MyIndex(res, restr)
	return len(s) - pos - 1
}
字符串替换
strings.Replace(str, old, new string, n int) string	//将str中前n个字符中的old替换为new,并返回一个新的字符串,如果n = -1则替换所有字符串old为字符串new
//模拟实现
package MyStrings

func index(s, str string, n int) int {	//从s的n位置开始,匹配字符串,返回字符串位置
	runes := []rune(s)	//将字符串转换成rune类型的切片
	runes = runes[n:]	//将切片从n的位置进行切片
	return MyIndex(string(runes), str)
}

//将字符串中前n个字符中匹配old的字符串替换为new字符串,并返回一个新字符串
func MyReplace(str, old, new string, n int) string {
	if str == "" || old == "" {
		panic("str || old null")
	}

	if n == -1 {
		n = len(str)
	}

	var newstr string	//保存返回的字符串
	var nowpos int	//标记实时位置
	var modpos int	//标记修改位置
	var poscount int
	runes := []rune(str)	//将原来的字符串进行切片
	for nowpos = 0; nowpos < n; nowpos = modpos + len(old) {
		poscount = modpos
		modpos = index(str, old, nowpos)
		if modpos == -1 {	//未匹配到old字符串
			var tmpstr string = string(runes[nowpos:])
			newstr = newstr + tmpstr
			return newstr
		}

		modpos = modpos + nowpos

		var tmpstr string = string(runes[nowpos:modpos])
		newstr = newstr + tmpstr	//将修改位置的前一部分添加进newstr
		newstr = newstr + new	//将new添加进newstr
		poscount = modpos - poscount
	}
	return newstr
}
重复字符串
strings.Repeat(s string, count int) string	//重复count次字符串s并返回一个新字符串
package MyStrings

//将string字符串重复count次并组织成一个新的字符串返回
func MyRepeat(s string, count int) string {
	var newstr string
	for i := 0; i < count; i++ {
		newstr = newstr + s
	}

	return newstr
}
修改大小写
strings.ToLower(s) string	//将字符串s转换为小写
string.ToUpper(s) string	//将字符串s转换为大写
修剪字符串
分割字符串
strings.Fields(s)	//按空格将字符串分割,返回值为一个slice
strings.Split(s, sep)	//按sep将字符串分割,返回一个slice
拼接slice到字符串
strings.Join(s1 []string, sep string) string	//将元素类型为string的slice使用sep作为分隔符拼接成一个字符串
从字符串中读取内容
strings.NewReader(str)	//生成一个Reader并读取字符串内容,返回值为指向该Reader的指针

字符串相关类型转换

字符串与相关类型的转换都是通过strconv包实现的

strconv.IntSize() int	//获取程序运行平台下int所占的位数
数字转字符串
strconv.Itoa(i int) string	//返回数字i对应的字符串表示
字符串转数字
strconv.Atoi(s string) (i int, err error)	//将字符串转换为int类型
字符串转float64型数字
strconv.ParseFloat(s string, bitSize int) (f float64, err error)	//将字符串转换为float64型
float64型数字转字符串
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string
//fmt的取值为'b','e','f','g'
//prec表示精度
//bitSize使用32则表示float32,用64表示float64
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值