首页 > 解决方案 > 获取字符串数组中每个字符串的第一个字符

问题描述

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

标签: goslice

解决方案


类似于在 java 中具有方法/函数 charAt() 的东西

在 Go 中,字符串是不可变的字节序列,其内容以 UTF-8 编码。字符串表示大致但不完全等同于[]byte切片(对于此答案的目的,区别并不重要)。

您可以在 go 中使用各种库方法:

  • 如果您的字符串保证由 ASCII 或其他单字节字符组成,您可以简单地索引字符串以恢复任意位置的字节。在第 th 位置索引字符串i将返回该位置的字节。在你的情况下,这将是str[0].

  • 如果您专门寻找第一个字符,而不是第一个字节,并且您的字符串可能包含更高字节顺序的 Unicode 代码点,则需要将字符串相应地解码为 Unicode。该unicode/utf8软件包为此提供了支持。循环中的以下代码acronym将为您正确解码每个字符串的第一个 UTF-8 编码符文str

for _, str := range arrayOfStrings {
    r, _ := utf8.DecodeRuneInString(str)
    acr = acr + string(r)
}

您应该注意有关DecodeRuneInString错误条件的方法的文档:

如果 s 为空,则返回 (RuneError, 0)。否则,如果编码无效,则返回 (RuneError, 1)。对于正确的、非空的 UTF-8,两者都是不可能的结果。

如果您的系统中可能存在任一条件,请确保添加适当的错误处理逻辑以检查返回结果。


推荐阅读