猿问

在大写字母之间添加一个空格

我有这样的字符串ClientLovesProcess我需要在每个大写字母之间添加一个空格,除了第一个大写字母,所以最终结果是这样的Client Loves Process


我认为 golang 没有最好的字符串支持,但这就是我考虑的方式:


首先循环遍历每个字母,如下所示:


name := "ClientLovesProcess"


wordLength := len(name)


for i := 0; i < wordLength; i++ {

    letter := string([]rune(name)[i])


    // then in here I would like to check

   // if the letter is upper or lowercase


   if letter == uppercase{

       // then break the string and add a space

   }

}

问题是我不知道如何检查一个字母是小写还是大写。我检查了字符串手册,但他们没有一些有它的功能。用 go 完成这件事的另一种方法是什么?


翻阅古今
浏览 244回答 2
2回答

aluckdog

您正在寻找的功能是unicode.IsUpper(r rune) bool.我会使用 abytes.Buffer这样你就不会做一堆字符串连接,这会导致额外的不必要的分配。这是一个实现:func addSpace(s string) string {&nbsp; &nbsp; buf := &bytes.Buffer{}&nbsp; &nbsp; for i, rune := range s {&nbsp; &nbsp; &nbsp; &nbsp; if unicode.IsUpper(rune) && i > 0 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buf.WriteRune(' ')&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; buf.WriteRune(rune)&nbsp; &nbsp; }&nbsp; &nbsp; return buf.String()}和一个播放链接。

慕娘9325324

您可以使用 unicode 包测试大写。这是我的解决方案:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "strings"&nbsp; &nbsp; "unicode")func main() {&nbsp; &nbsp; name := "ClientLovesProcess"&nbsp; &nbsp; newName := ""&nbsp; &nbsp; for _, c := range name {&nbsp; &nbsp; &nbsp; &nbsp; if unicode.IsUpper(c){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newName += " "&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; newName += string(c)&nbsp; &nbsp; }&nbsp; &nbsp; newName = strings.TrimSpace(newName) // get rid of space on edges.&nbsp; &nbsp; fmt.Println(newName)}
随时随地看视频慕课网APP

相关分类

Go
我要回答