猿问

仅替换开头和结尾处的字符串

我想替换第一个和最后一个,但不是.aaaabcd


目前,它返回,但我希望有hello hellobcd hellohello abcd hello


我使用的原因是我不一定知道出现的位置和数量。但是,如果在组合字符串中,我不想替换它,而只是保持原样。Go中有什么解决方案可以解决这个问题?ReplaceAllaa


package main


import (

    "fmt"

    "strings"

)


func main() {

    item := "hello"

    test := "a abcd a"

    s := "a"


    item = strings.ReplaceAll(test, s, item)

    fmt.Println(item)

}

输出:


hello hellobcd hello

游乐场: https://play.golang.org/p/D1VzvipblKu


开心每一天1111
浏览 110回答 3
3回答

扬帆大鱼

您可以使用正则表达式:package mainimport (    "fmt"    "regexp")func main() {    regexForA := regexp.MustCompile(`\ba\b`)        test := "a abcd a"        output := regexForA.ReplaceAllLiteralString(test,`hello`)        fmt.Println(output)}输出:hello abcd hello用于运行此示例的 Playground 链接:https://play.golang.org/p/Cs99TrQDUtK

潇潇雨雨

您可以将问题一分为二:首先从一开始就获取字符串,然后执行限制为 1 的普通替换。这将为您提供:你好 abcd a然后,反转字符串并执行相同的操作。您肯定可以对其进行更优化,但这将完成工作,并且仍然具有很强的可读性:func Reverse(s string) (result string) {  for _,v := range s {    result = string(v) + result  }  return }func main() {    item := "hello"    test := "a abcd a"    s := "a"    result := strings.Replace(test, s, item, 1)    result = Reverse(strings.Replace(Reverse(result), s, Reverse(item), 1))    fmt.Println(result)}指纹你好 abcd 你好请注意,您需要反转第一个输入字符串,替换,然后反转结果以使其恢复正确的顺序。操场链接: https://play.golang.org/p/tuzxehhnEDu

万千封印

如果我这样做,我只会拆分字符串(字符串。字段),然后基于字符串比较替换伪代码:for i, field := range fields {    if field == "a" {        fields[i] = "hello"    }}我在手机上写了它,从来没有测试过,但你应该理解一个概念:)
随时随地看视频慕课网APP

相关分类

Go
我要回答