Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 仅替换开头和结尾的字符串_String_Go - Fatal编程技术网

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开始和/或结束时)不是因为它不是大字的一部分,只是因为它不是大字的一部分,我今天读了这句话,它让我对我的回答产生了疑问:“有些人在遇到问题时,会想‘我知道,我会使用正则表达式’。现在他们有两个问题’这实际上解决了我的问题