我是golang的新手,我正在尝试获取字符串数组中字符串的第一个字符。似乎很容易,但是我不知道该如何处理。到目前为止,这是我所做的:
package main
import (
"fmt"
"os"
"strings"
)
func acronym(s string) (acr string) {
// TODO: Your code here
var arrayOfStrings []string
arrayOfStrings = strings.Split(s, " ") //split string s into an array of strings based on space delimeter " "
for _, str := range arrayOfStrings {
fmt.Println(str)
}
return acr
}
func main() {
s := "Pan Galactic Gargle Blaster"
if len(os.Args) > 1 {
s = strings.Join(os.Args, " ")
}
fmt.Println(acronym(s))
}
我希望生成的字符串是PGGB,因为我只循环遍历字符串数组,所以我有点卡住了,但是我想不起来像Java中那样的具有方法/函数charAt()的东西。谢谢!
答案 0 :(得分:4)
类似Java的东西,其中具有方法/函数charAt()
在开始时,字符串是不可变的字节序列,其内容以UTF-8编码。字符串表示形式大致但不完全等同于[]byte
切片(对于此答案的区别并不重要)。
您可以在go中使用多种库方法:
如果保证您的字符串包含ASCII或其他单字节字符,则可以简单地索引该字符串以恢复任意位置的字节。在第i
位索引该字符串将返回该位置的字节。您的情况是str[0]
。
如果您专门搜索第一个字符,而不是第一个字节,并且您的字符串可能包含更高字节顺序的Unicode代码点,则需要相应地将字符串解码为Unicode。 unicode/utf8
软件包对此提供了支持。 acronym
中循环中的以下代码将为您正确解码每个字符串str
的第一个UTF-8编码符文:
for _, str := range arrayOfStrings {
r, _ := utf8.DecodeRuneInString(str)
acr = acr + string(r)
}
您应该注意有关错误情况的DecodeRuneInString
方法的文档:
如果s为空,则返回(RuneError,0)。否则,如果编码无效,则返回(RuneError,1)。对于正确的非空UTF-8,这都是不可能的结果。
如果系统中有两种情况都可能发生,请确保添加适当的错误处理逻辑以检查返回结果。