4 回答
TA贡献1784条经验 获得超9个赞
如文档strings.Title中所述,已弃用,您应该cases.Title改用。
弃用:Title 用于单词边界的规则不能正确处理 Unicode 标点符号。请改用 golang.org/x/text/cases。
以下是如何从两个角度使用它的示例代码:
// Straightforward approach
caser := cases.Title(language.BrazilianPortuguese)
titleStr := caser.String(str)
// Transformer interface aware approach
src := []byte(s)
dest := []byte(s) // dest can also be `dest := src`
caser := cases.Title(language.BrazilianPortuguese)
_, _, err := caser.Transform(dest, src, true)
请务必查看transform.Transformer.Transform和cases.Caser以了解每个参数和返回值的含义,以及该工具的局限性。例如:
Caser 可能是有状态的,因此不应在 goroutine 之间共享。
关于language使用什么,您应该知道它们在结果上的差异,除此之外,您应该可以随意选择。这是煎鱼的一份关于为我清除它的差异的总结:
去游乐场:https ://go.dev/play/p/xp59r1BkC9L
func main() {
src := []string{
"hello world!",
"i with dot",
"'n ijsberg",
"here comes O'Brian",
}
for _, c := range []cases.Caser{
cases.Lower(language.Und),
cases.Upper(language.Turkish),
cases.Title(language.Dutch),
cases.Title(language.Und, cases.NoLower),
} {
fmt.Println()
for _, s := range src {
fmt.Println(c.String(s))
}
}
}
输出如下
hello world!
i with dot
'n ijsberg
here comes o'brian
HELLO WORLD!
İ WİTH DOT
'N İJSBERG
HERE COMES O'BRİAN
Hello World!
I With Dot
'n IJsberg
Here Comes O'brian
Hello World!
I With Dot
'N Ijsberg
Here Comes O'Brian
TA贡献1829条经验 获得超4个赞
到目前为止,就像
strings.Title()
是在使用Und
或English
?
strings.Title()
基于 ASCII工作,cases.Title()
基于 Unicode 工作,没有办法获得完全相同的行为。
我应该使用 language.English 还是 language.AmericanEnglish 还是其他语言?
language.English
,language.AmericanEnglish
而且language.Und
似乎都有相同的Title规则。使用它们中的任何一个都应该让您最接近strings.Title()
您将要获得的原始行为。
使用这个支持 Unicode 的包的全部意义在于它客观上更正确。因此,请选择适合您用户的标签。
TA贡献1779条经验 获得超6个赞
strings.Title(str)已弃用,应更改为cases.Title(language.Und, cases.NoLower).String(str)
package main
import (
"fmt"
"strings"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func main() {
fmt.Println(strings.Title("abcABC")) // AbcABC
fmt.Println(cases.Title(language.Und, cases.NoLower).String("abcABC")) // AbcABC
}
游乐场:https ://go.dev/play/p/i0Eqh3QfxTx
TA贡献1804条经验 获得超7个赞
下面是一个简单的示例,说明如何使用 golang.org/x/text 包将变量中每个字符串值的首字母大写。
package main
import (
"fmt"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func main() {
sampleStr := "with value lower, all the letters are lowercase. this is good for poetry perhaps"
caser := cases.Title(language.English)
fmt.Println(caser.String(sampleStr))
}
输出:值较低时,所有字母均为小写。也许这对诗歌有好处
游乐场示例:https ://go.dev/play/p/_J8nGVuhYC9
- 4 回答
- 0 关注
- 350 浏览
添加回答
举报