为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字符串的第一个字母大写

如何将字符串的第一个字母大写

Go
慕妹3146593 2022-10-17 16:15:14
我有一个这样的字符串var sentence string = "the biggest ocean is the Pacific ocean"我希望能够将t输入字符串中的第一个字母大写,使字符串变为"The biggest ocean is the Pacific ocean"如何在 Go 中做到这一点?我试过使用strings.Title,strings.ToTitle但是他们没有做我想做的事。
查看完整描述

4 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

假设您的输入字符串是有效的 UTF-8,这个线程(Golang - ToUpper() on a single byte?)足够接近,虽然不是一个完美的副本。我们可以在此基础上使用字符串unicode.ToUpper的第一个符文来得出一个可接受的解决方案。

    r := []rune(s)
    r[0] = unicode.ToUpper(r[0])
    s := string(r)

或者使用“聪明”的单线:

    s := string(append([]rune{unicode.ToUpper(r[0])}, r[1:]...))

与字符串不同,符文切片不是不可变的,因此您可以将第一个符文替换为ToUpper,这将处理具有大写字母(例如俄语)的非 ASCII 和/或多字节代码点,而忽略那些没有的t(例如亚洲文字)

注意: UPPER case 和 TITLE case 是有区别的,这里简单解释一下。简而言之,像DŽ这样的二合字母将有不同的标题大小写(Dž,只有第一个字素大写)和大写(DŽ,两个字素都大写)。如果您确实需要标题大小写,请使用unicode.ToTitle.

注意 2:转换为/从stringto[]rune涉及复制,因为您从不可变字符串中获得可变切片。如果您希望在对性能敏感的代码中使用它,请对您的应用程序进行分析。

游乐场:https ://go.dev/play/p/HpCBM7cRflZ


如果您有一个相当大的输入字符串,其中完整的符文切片转换变得过于昂贵,您可以使用某个分隔符上的上限来解决此strings.SplitN问题,本质上是提取文本的第一个单词并仅在转换中使用它:

sep := " "

ss := strings.SplitN(s, sep, 2)


r := []rune(ss[0])

r[0] = unicode.ToUpper(r[0])


s = string(r) + sep + ss[1])

使用约 30K 输入字符串进行基准测试显示出显着差异:


go test -v -bench=. -benchmem

goos: darwin

goarch: arm64

pkg: example.com

BenchmarkRuneConv-10            6376        183691 ns/op      258049 B/op          3 allocs/op

BenchmarkSplitN-10           1709989           706.1 ns/op      4152 B/op          3 allocs/op

PASS

ok      example.com 3.477s


查看完整回答
反对 回复 2022-10-17
?
侃侃无极

TA贡献2051条经验 获得超10个赞

获取第一个符文,符文的标题大小写并重新组装字符串:


sentence := "the biggest ocean is the Pacific ocean"

r, i := utf8.DecodeRuneInString(sentence)

sentence = string(unicode.ToTitle(r)) + sentence[i:]

fmt.Println(sentence)


查看完整回答
反对 回复 2022-10-17
?
富国沪深

TA贡献1790条经验 获得超9个赞

达到预期结果的最简单方法是使用strings.ToUpper()函数。参考

var input string = "the biggest ocean is the Pacific ocean"

    res := strings.ToUpper(input[:1]) + input[1:]


    fmt.Println(res)

或者

你可以去goplayground试试


查看完整回答
反对 回复 2022-10-17
?
偶然的你

TA贡献1841条经验 获得超3个赞

我有简单的解决方案给你。


它是我在 Github 上的某人项目的一个分支


https://github.com/CleanMachine1/capitalise

要使用它,只需在终端中运行:


go mod init MODULENAME

go get github.com/cleanmachine1/capitalise

然后在你的代码中你可以使用



package main


import ("github.com/cleanmachine1/capitalise")


func main(){

 sentence = capitalise.First(sentence)

}


查看完整回答
反对 回复 2022-10-17
  • 4 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号