我有一大串字符串,例如这个:
"INTEGRATED ENGINEERING 5 Year (BSC with a Year in Industry)"
我想将单词的第一个字母大写,并将其余单词小写。所以
INTEGRATED
会变成 Integrated
。
作品中的第二个扳手 - 我想要一些单词的例外,例如
and
、in
、a
、with
。
所以上面的例子就变成:
"Integrated Engineering 5 Year (Bsc with a Year in Industry)"
我该如何在 Go 中做到这一点?我可以编写循环/数组来管理更改,但实际的字符串转换是我所困扰的。
内置
strings
包中有一个函数称为 Title
。
s := "INTEGRATED ENGINEERING 5 Year (BSC with a Year in Industry)"
fmt.Println(strings.Title(strings.ToLower(s)))
您可以使用正则表达式来完成此任务。
\w+
正则表达式将匹配所有单词,然后通过使用 Regexp.ReplaceAllStringFunc
您可以将单词替换为预期内容,跳过停用词。对于您的情况,strings.ToLower
和 strings.Title
也会有帮助。
示例:
str := "INTEGRATED ENGINEERING 5 Year (BSC with a Year in Industry)"
// Function replacing words (assuming lower case input)
replace := func(word string) string {
switch word {
case "with", "in", "a":
return word
}
return strings.Title(word)
}
r := regexp.MustCompile(`\w+`)
str = r.ReplaceAllStringFunc(strings.ToLower(str), replace)
fmt.Println(str)
// Output:
// Integrated Engineering 5 Year (Bsc with a Year in Industry)
https://play.golang.org/p/uMag7buHG8
您可以轻松地将其适应您的字符串数组。
以下是编写函数的方法。
func toTitle(s string) string {
return strings.ToUpper(s[:1]) + strings.ToLower(s[1:])
}