go - 获取字符串数组中每个字符串的第一个字符
问题描述
我是 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() 的东西。谢谢!
解决方案
类似于在 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,两者都是不可能的结果。
如果您的系统中可能存在任一条件,请确保添加适当的错误处理逻辑以检查返回结果。
推荐阅读
- c# - HttpClient.PostAsync continueWith 未执行
- javascript - 从数据表对象获取列 mData 键
- c++ - 如何分隔这个文本文件?斯托克
- javascript - requestAnimationFrame 似乎在调用 cancelAnimationFrame 后更新变量
- kubernetes - 本地持久卷 1 节点未找到要绑定的可用持久卷
- python - 根据行的某个值派生一个新的pandas列并应用直到下一个值再次出现
- javascript - 为什么在打印 console.log 输出之前会出现 2-3 个提示?
- php - 我无法编辑背景图像。使用宝石主题。custom.css 出错
- reactjs - 是否可以在不使用箭头函数的情况下使用 TypeScript 键入 React 函数组件?
- pyomo - pyomo 的 Couenne 选项