-2

我需要用相同单词的大写替换字符串。到目前为止,我可以从包含我的字符串的文本文件中搜索子字符串,并将“apple”或“Apple”或“ApPle”之类的单词替换为“APPLE” ”。当字符串是“那个菠萝苹果 adamsApple applepie 的味道吗?”时存在问题,我的搜索关键字存在于另一个词之间,因此无法找到和转换。

我的最终工作代码:

 //Get the txt file from the directory and search for word
  func  fileRead(getPath  string,  searchkey  string){
    var  count  int
    buf1,_:=ioutil.ReadFile(getPath);
    var  buf2=  string(buf1)
    var  b  string
    tokens:=strings.Fields(buf2)
    re := regexp.MustCompile("(?i)"+searchkey)//make searchkey case insensitive
     for  i:=0;i<len(tokens);i++{

      if  (strings.EqualFold(tokens[i],searchkey)){

      tokens[i] = re.ReplaceAllString(tokens[i], strings.ToUpper(searchkey))
      count++

     }else{

      tokens[i]=re.ReplaceAllLiteralString(tokens[i],strings.ToUpper(searchkey))
      count++
         }
        }
        for  j:=0;  j<len(tokens);  j++{
         b+=  tokens[j]
         b+="  "  
          }
        c  :=  []byte(b)
        fmt.Println(count,"                  ",getPath)
        ioutil.WriteFile(getPath,  c,  0644)//rights back to the file
   }
4

2 回答 2

2

你应该为此使用正则表达式,一个简单的例子

func KeywordsToUpper(src string, keywords ...string) string {
    var re = regexp.MustCompile(`\b(` + strings.Join(keywords, "|") + `)\b`)
    return re.ReplaceAllStringFunc(src, func(w string) string {
        return strings.ToUpper(w)
    })
}

//编辑

我想我误解了这个问题,如果你只想替换一个单词,即使它在其他单词的中间,myapplecomputer那么 usingstrings.Replace就足够了,例如:

func ReplaceLikeYouDontCare(src string, words ...string) string {
    for _, w := range words {
        src = strings.Replace(src, w, strings.ToUpper(w), -1)
    }
    return src
}
于 2014-07-17T17:46:09.393 回答
1

不是strings.Replace正是你要找的吗?

func fileRead(getPath string, searchkey string) {
    buf, _ := ioutil.ReadFile(getPath)
    strings.Replace(string(buf), searchkey, strings.ToUpper(searchkey), -1)
}
于 2014-07-17T17:55:55.210 回答