4 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
假設(shè)您的輸入字符串是有效的 UTF-8,這個(gè)線程(Golang - ToUpper() on a single byte?)足夠接近,雖然不是一個(gè)完美的副本。我們可以在此基礎(chǔ)上使用字符串unicode.ToUpper
的第一個(gè)符文來得出一個(gè)可接受的解決方案。
r := []rune(s) r[0] = unicode.ToUpper(r[0]) s := string(r)
或者使用“聰明”的單線:
s := string(append([]rune{unicode.ToUpper(r[0])}, r[1:]...))
與字符串不同,符文切片不是不可變的,因此您可以將第一個(gè)符文替換為ToUpper
,這將處理具有大寫字母(例如俄語)的非 ASCII 和/或多字節(jié)代碼點(diǎn),而忽略那些沒有的t(例如亞洲文字)
注意: UPPER case 和 TITLE case 是有區(qū)別的,這里簡單解釋一下。簡而言之,像?這樣的二合字母將有不同的標(biāo)題大小寫(?,只有第一個(gè)字素大寫)和大寫(?,兩個(gè)字素都大寫)。如果您確實(shí)需要標(biāo)題大小寫,請(qǐng)使用unicode.ToTitle
.
注意 2:轉(zhuǎn)換為/從string
to[]rune
涉及復(fù)制,因?yàn)槟鷱牟豢勺冏址蝎@得可變切片。如果您希望在對(duì)性能敏感的代碼中使用它,請(qǐng)對(duì)您的應(yīng)用程序進(jìn)行分析。
游樂場(chǎng):https ://go.dev/play/p/HpCBM7cRflZ
如果您有一個(gè)相當(dāng)大的輸入字符串,其中完整的符文切片轉(zhuǎn)換變得過于昂貴,您可以使用某個(gè)分隔符上的上限來解決此strings.SplitN
問題,本質(zhì)上是提取文本的第一個(gè)單詞并僅在轉(zhuǎn)換中使用它:
sep := " "
ss := strings.SplitN(s, sep, 2)
r := []rune(ss[0])
r[0] = unicode.ToUpper(r[0])
s = string(r) + sep + ss[1])
使用約 30K 輸入字符串進(jìn)行基準(zhǔn)測(cè)試顯示出顯著差異:
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

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
獲取第一個(gè)符文,符文的標(biāo)題大小寫并重新組裝字符串:
sentence := "the biggest ocean is the Pacific ocean"
r, i := utf8.DecodeRuneInString(sentence)
sentence = string(unicode.ToTitle(r)) + sentence[i:]
fmt.Println(sentence)

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
達(dá)到預(yù)期結(jié)果的最簡單方法是使用strings.ToUpper()
函數(shù)。參考
var input string = "the biggest ocean is the Pacific ocean"
res := strings.ToUpper(input[:1]) + input[1:]
fmt.Println(res)
或者
你可以去goplayground試試

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
我有簡單的解決方案給你。
它是我在 Github 上的某人項(xiàng)目的一個(gè)分支
https://github.com/CleanMachine1/capitalise
要使用它,只需在終端中運(yùn)行:
go mod init MODULENAME
go get github.com/cleanmachine1/capitalise
然后在你的代碼中你可以使用
package main
import ("github.com/cleanmachine1/capitalise")
func main(){
sentence = capitalise.First(sentence)
}
- 4 回答
- 0 關(guān)注
- 170 瀏覽
添加回答
舉報(bào)