将字符串中单词的第一个字母变为大写

问题描述 投票:0回答:5

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

"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 中做到这一点?我可以编写循环/数组来管理更改,但实际的字符串转换是我所困扰的。

string go title-case
5个回答
134
投票

内置

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


26
投票

以下是已接受答案的替代,现已已弃用

package main

import (
    "fmt"
    "golang.org/x/text/cases"
    "golang.org/x/text/language"
)

func main() {
    msg := "INTEGRATED ENGINEERING 5 Year (BSC with a Year in Industry)"
    fmt.Println(cases.Title(language.English, cases.Compact).String(msg))
}

16
投票

您可以使用正则表达式来完成此任务。

\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

您可以轻松地将其适应您的字符串数组


1
投票

在 Go 1.18 strings.Title() 中已弃用。

这里您可以阅读以下内容来了解现在该使用什么

你应该使用 case.Title 来代替。


0
投票

以下是编写函数的方法。

func toTitle(s string) string {
    return strings.ToUpper(s[:1]) + strings.ToLower(s[1:])
}
© www.soinside.com 2019 - 2024. All rights reserved.