46

我有一大堆字符串,比如这个:

"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 中执行此操作?我可以编写循环/数组来管理更改,但实际的字符串转换是我所苦苦挣扎的。

4

3 回答 3

120

内置strings包中有一个名为Title.

s := "INTEGRATED ENGINEERING 5 Year (BSC with a Year in Industry)"
fmt.Println(strings.Title(strings.ToLower(s)))

https://go.dev/play/p/THsIzD3ZCF9

于 2016-11-02T14:23:36.923 回答
14

您可以为此任务使用正则表达式。\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

您可以轻松地将其调整为您的字符串数组

于 2015-11-13T15:44:59.667 回答
-21

好吧,您没有指定您使用的语言,所以我会给您一个一般性的答案。你有一个数组,里面有一堆字符串。首先,我将整个字符串设为小写,然后遍历字符串中的每个字符(大写第一个字符,其余保持小写)。此时您需要寻找空格,这将帮助您划分每个字符串中的单词。找到空格后的第一个字符显然是不同的单词,应该大写。您也可以使用 Or a 验证下一个单词 is not 和 in。

我不在电脑前,所以我不能给出一个具体的例子,但我希望这至少能朝着正确的方向发展

于 2015-11-13T15:34:26.250 回答