go如何删除字符串中的部分字符
go,在删除切⽚中的元素时,可以使⽤append(),⽅式将其中的元素删除。
slice :=make([]int , 0)
slice = append(slice[:k],slice[k+1:])
//此⽅法就是删除切⽚中位于k中的元素
由于字符串也可以进⾏遍历,但是字符串不可以进⾏切⽚操作,也就是只有切⽚才能使⽤append()操作
所以如果要在字符串中删除某⼀个字符。
str :="teststring"
str = str[:5]+str[6:]//与其他语⾔相似,在进⾏切割时,没有包括前⾯的索引,但是不包括后⾯的索引
//str = testsring
补充:Go 字符串处理
直接使⽤“+”:
⽰例:
a := "aa"
b := "bb"
a = a + b
fmt.Println(a)
因为字符串类型在Go中是不可改变的,因此每次操作实际都要新分配字符串,所以在字符串⽐较多的时候效率不⾼。使⽤strings.Join()函数
⽰例:
var s []string
for i := 0; i <= 9; i++ {
s = append(s, strconv.Itoa(i))
}
fmt.Println(strings.Join(s, ""))
这种⽅式需要花费构建slice的时间。
使⽤bytes.Buffer:
⽰例:
package main
import (
"bytes"
"fmt"
"strconv"
)
func main() {
var buffer bytes.Buffer
for i := 0; i <= 9; i++ {
字符串切片截取buffer.WriteString(strconv.Itoa(i))
}
fmt.Println(buffer.String())
}
这种在字符串⽐较多的时候效率最⾼。
字符串截取
不含中⽂
s := "abcdefg"
s = string([]byte(s)[1:3])
fmt.Println(s)
结果
bc
含中⽂
s := "a你好cd"
s = string([]rune(s)[:3])
fmt.Println(s)
结果
a你好
在golang中可以通过切⽚截取⼀个数组或字符串,但是当截取的字符串是中⽂时,可能会出现的问题是:
由于中⽂⼀个字不只是由⼀个字节组成,所以直接通过切⽚可能会把⼀个中⽂字的编码截成两半,结果导致最后⼀个字符是乱码。
可以先将其转为[]rune,再截取后,转回string
字符串替换
⽰例:
fmt.Println(strings.Replace("ABAACEDF", "A", "a", 2)) // aBaACEDF
fmt.Println(strings.Replace("ABAACEDF", "A", "a", -1)) // aBaaCEDF
//第四个参数⼩于0,表⽰所有的都替换
字符串转⼤写
⽰例:
fmt.Println(strings.ToUpper("abaacedf")) //ABAACEDF
字符串转⼩写
⽰例:
fmt.Println(strings.ToLower("ABAACEDF")) //abaacedf
查⼦串
1、func Contains(s, substr string) bool :这个函数是查某个字符是否在这个字符串中存在,存在返回true
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Contains("hello world", "lo")) //true
}
2、func ContainsAny(s, chars string) bool:判断字符串s中是否包含个⼦串str中的任何⼀个字符。
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.ContainsAny("hello world", "w")) //true
fmt.Println(strings.ContainsAny("hello world", "wdx")) //true
fmt.Println(strings.ContainsAny("hello world", "x")) //false
}
3、Count(s string, str string) int:计算字符串str在s中的⾮重叠个数。如果str为空串则返回s中的字符(⾮字节)个数+1。package main
import (
fmt.Println(strings.Count("hello world", "l")) //3
}
4、ContainsRune(s string, r rune) bool:判断字符串s中是否包含字符r。其中rune类型是utf8.RUneCountString可以完整表⽰全部Unicode字符的类型。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.ContainsRune("hello world", 'l')) //true
fmt.Println(strings.ContainsRune("hello world", rune('l'))) //true
fmt.Println(strings.ContainsRune("hello world", 108)) //true
fmt.Println(strings.ContainsRune("hello world", 10)) //false
}
5、Index(s string, str string) int :返回⼦串str在字符串s中第⼀次出现的位置。如果不到则返回-1;如果str为空,则返回0。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Index("hello world", "l")) //2
}
6、LastIndex(s string, str string) int:返回⼦串str在字符串s中最后⼀次出现的位置。如果不到则返回-1;如果str为空则返回字符串s的长度。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.LastIndex("hello world", "l")) //9
}
7、IndexRune(s string, r rune) int :返回字符r在字符串s中第⼀次出现的位置。如果不到则返回-1。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.IndexRune("hello world", 'l')) //2
fmt.Println(strings.IndexRune("hello world", rune('l'))) //2
}
这⾥注意rune类型使⽤的单引号。
8、IndexAny(s string, str string) int :返回字符串str中的任何⼀个字符在字符串s中第⼀次出现的位置。如果不到或str为空则返回-1。
⽰例
package main
import (
fmt.Println(strings.IndexAny("hello world", "l")) //2
fmt.Println(strings.IndexAny("hello world", "le")) //1
}
9、LastIndexAny(s string, str string) int:返回字符串str中的任何⼀个字符在字符串s中最后⼀次出现的位置。如果不到或str为空则返回-1。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.LastIndexAny("hello world", "l")) //9
fmt.Println(strings.LastIndexAny("hello world", "le")) //9
}
10、SplitN(s, str string, n int) []string:以str为分隔符,将s切分成多个⼦串,结果中不包含str本⾝。如果str为空则将s切分成Unicode字符列表。如果s中没有str⼦串,则将整个s作为[]string的第⼀个元素返回。
参数n表⽰最多切分出⼏个⼦串,超出的部分将不再切分,最后⼀个n包含了所有剩下的不切分。如果n为0,则返回nil;如果n ⼩于0,则不限制切分个数,全部切分。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.SplitN("hello world", "l", 2)) //[he lo world]
fmt.Println(strings.SplitN("hello world", "l", 4)) //[he o wor d]
}
11、SplitAfterN(s, str string, n int) []string:以str为分隔符,将s切分成多个⼦串,结果中包含str本⾝。如果str为空,则将s切分成Unicode字符列表。如果s 中没有str⼦串,则将整个s作为 []string 的第⼀个元素返回。
参数n表⽰最多切分出⼏个⼦串,超出的部分将不再切分。如果n为0,则返回 nil;如果 n ⼩于 0,则不限制切分个数,全部切分。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.SplitAfterN("hello world", "l", 2)) //[hel lo world]
fmt.Println(strings.SplitAfterN("hello world", "l", 4)) //[hel l o worl d]
}
12、Split(s, str string) []string:以str为分隔符,将s切分成多个⼦切⽚,结果中不包含str本⾝。如果str为空,则将s切分成Unicode字符列表。如果s中没有str⼦串,则将整个s作为[]string的第⼀个元素返回。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Split("hello world", "l")) //[he o wor d]
}
13、SplitAfter(s, str string) []string:以str为分隔符,将s切分成多个⼦切⽚,结果中包含str本⾝。如果 str 为空,则将 s 切分成Unicode字符列表。如果s中没有str⼦串,则将整个s作为[]string的第⼀个元素返回。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.SplitAfter("hello world", "l")) //[hel l o worl d]
}
14、Fields(s string) []string:以连续的空⽩字符为分隔符,将s切分成多个⼦串,结果中不包含空⽩字符本⾝。空⽩字符有:\t, \n, \v, \f, \r, ' ‘, U+0085 (NEL), U+00A0 (NBSP) 。如果 s 中只包含空⽩字符,则返回⼀个空列表。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Fields("hello world")) //[hello world]
}
15、FieldsFunc(s string, f func(rune) bool) []string:以⼀个或多个满⾜f(rune)的字符为分隔符,将s切分成多个⼦串,结果中不包含分隔符本⾝。如果s中没有满⾜f(rune)的字符,则返回⼀个空列表。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
//空格和l都是分隔符
fn := func(c rune) bool {
return strings.ContainsRune(" l", c)
}
fmt.Println(strings.FieldsFunc("hello world", fn)) //[he o wor d]
}
16、HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.HasPrefix("hello world", "hel")) //true
fmt.Println(strings.HasPrefix("hello world", "el")) //false
}
17、HasSuffix(s, suffix string) bool:判断字符串s是否以prefix结尾。
⽰例
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.HasSuffix("hello world", "ld")) //true
fmt.Println(strings.HasSuffix("hello world", "el")) //false
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论