String 仅替换开头和结尾的字符串
我想替换第一个String 仅替换开头和结尾的字符串,string,go,String,Go,我想替换第一个a和最后一个a,但不是abcd中的a 目前,它返回hello hellobcd hello但我希望返回hello abcd hello 我使用ReplaceAll的原因是我不一定知道a的位置和数量。但是如果a在一个组合字符串中,我不想替换它,只想让它保持原样。Go中的解决方案是什么 package main import ( "fmt" "strings" ) func main() { item := "
a
和最后一个a
,但不是abcd
中的a
目前,它返回hello hellobcd hello
但我希望返回hello abcd hello
我使用ReplaceAll
的原因是我不一定知道a
的位置和数量。但是如果a
在一个组合字符串中,我不想替换它,只想让它保持原样。Go中的解决方案是什么
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
hello abcd hello
游乐场:
如果我正在做这样的事情,我只需要拆分字符串(strings.Fields),然后根据字符串比较替换为伪代码:
for i, field := range fields {
if field == "a" {
fields[i] = "hello"
}
}
我在电话上写的,从未测试过,但你应该理解一个概念:)你可以使用正则表达式:
主程序包
进口(
“fmt”
“regexp”
)
func main(){
regexForA:=regexp.MustCompile(`\ba\b`)
测试:=“a abcd a”
输出:=regexForA.ReplaceAllLiteralString(测试,`hello`)
fmt.Println(输出)
}
输出:
hello hellobcd hello
hello abcd hello
运行此示例的游乐场链接:您可以将问题分为两部分:首先从开始处提取字符串,并使用一个限制值进行简单替换。这将给你: 你好,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)
}
印刷品
你好,你好
请注意,您需要反转第一个输入字符串、替换字符串和结果,以使其恢复正确的顺序
操场链接:是否要替换第一个和最后一个
a
,因为它位于字符串的开头和结尾,或者因为它不是较大单词的一部分?使用“a”(两边都有空格)作为测试并分别处理边格(当字符串以a开始和/或结束时)不是因为它不是大字的一部分,只是因为它不是大字的一部分,我今天读了这句话,它让我对我的回答产生了疑问:“有些人在遇到问题时,会想‘我知道,我会使用正则表达式’。现在他们有两个问题’这实际上解决了我的问题