获取字符串数组中每个字符串的第一个字符

时间:2018-09-04 22:13:46

标签: go slice

我是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()的东西。谢谢!

1 个答案:

答案 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,这都是不可能的结果。

如果系统中有两种情况都可能发生,请确保添加适当的错误处理逻辑以检查返回结果。