如何将字符串的第一个字母大写
How to capitalize the first letter of a string
我有这样的字符串
var sentence string = "the biggest ocean is the Pacific ocean"
我希望能够将输入字符串中的第一个字母t
大写,这样字符串就变成了
"The biggest ocean is the Pacific ocean"
如何在 Go 中做到这一点?
我尝试过使用 strings.Title
和 strings.ToTitle
,但是它们不符合我的要求。
我有一个简单的解决方案给你。
它是我在 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)
}
获取第一个符文,符文的标题大小写并重新组装字符串:
sentence := "the biggest ocean is the Pacific ocean"
r, i := utf8.DecodeRuneInString(sentence)
sentence = string(unicode.ToTitle(r)) + sentence[i:]
fmt.Println(sentence)
假设您的输入字符串是有效的 UTF-8,此线程() is close enough, though not quite a perfect duplicate. We can build on that to come to an acceptable solution using unicode.ToUpper
在第一个 rune字符串。
r := []rune(s)
r[0] = unicode.ToUpper(r[0])
s := string(r)
或者使用“聪明”的单行代码:
s := string(append([]rune{unicode.ToUpper(r[0])}, r[1:]...))
不像字符串,符文切片不是不可变的,所以你可以用 ToUpper
替换第一个符文,这将处理非 ASCII and/or 多字节代码点大小写(例如俄语),不考虑那些(例如亚洲文字)
NOTE:UPPER和TITLE大小写有区别,简单说明一下. In short, digraph characters like DŽ will have different title case (Dž, only first grapheme capitalized) and upper cases (DŽ, both graphemes capitalized). If you actually need titlecase, use unicode.ToTitle
.
注意 2: 将 to/from string
转换为 []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
获得所需结果的最简单方法是使用 strings.ToUpper()
函数。 Refer
var input string = "the biggest ocean is the Pacific ocean"
res := strings.ToUpper(input[:1]) + input[1:]
fmt.Println(res)
或
你可以在goplayground
上试试
我有这样的字符串
var sentence string = "the biggest ocean is the Pacific ocean"
我希望能够将输入字符串中的第一个字母t
大写,这样字符串就变成了
"The biggest ocean is the Pacific ocean"
如何在 Go 中做到这一点?
我尝试过使用 strings.Title
和 strings.ToTitle
,但是它们不符合我的要求。
我有一个简单的解决方案给你。
它是我在 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)
}
获取第一个符文,符文的标题大小写并重新组装字符串:
sentence := "the biggest ocean is the Pacific ocean"
r, i := utf8.DecodeRuneInString(sentence)
sentence = string(unicode.ToTitle(r)) + sentence[i:]
fmt.Println(sentence)
假设您的输入字符串是有效的 UTF-8,此线程(unicode.ToUpper
在第一个 rune字符串。
r := []rune(s)
r[0] = unicode.ToUpper(r[0])
s := string(r)
或者使用“聪明”的单行代码:
s := string(append([]rune{unicode.ToUpper(r[0])}, r[1:]...))
不像字符串,符文切片不是不可变的,所以你可以用 ToUpper
替换第一个符文,这将处理非 ASCII and/or 多字节代码点大小写(例如俄语),不考虑那些(例如亚洲文字)
NOTE:UPPER和TITLE大小写有区别,简单说明一下unicode.ToTitle
.
注意 2: 将 to/from string
转换为 []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
获得所需结果的最简单方法是使用 strings.ToUpper()
函数。 Refer
var input string = "the biggest ocean is the Pacific ocean"
res := strings.ToUpper(input[:1]) + input[1:]
fmt.Println(res)
或
你可以在goplayground
上试试