Сделать первую букву слов в верхнем регистре в строке

У меня есть большой массив строк, таких как этот:

'ИНТЕГРИРОВАННАЯ ИНЖЕНЕРИЯ 5 лет (BSC с годом в промышленности)'

Я хочу загладить первую букву слов и сделать остальные слова строчными. Таким образом, "INTEGRATED" станет "интегрированным".

Второй гаечный ключ в работе - я хочу исключение из нескольких слов, таких как 'и', 'in', 'a', 'with'.

Таким образом, приведенный выше пример станет следующим:

Интегрированная инженерия 5 лет (Bsc с годом в промышленности).

Как мне это сделать в Go? Я могу закодировать цикл/массивы для управления изменением, но фактическое преобразование строк - это то, с чем я борюсь.

Ответ 2

Вы можете использовать регулярные выражения для этой задачи. A \w+ regexp будет соответствовать всем словам, затем, используя 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

Вы можете легко адаптировать это к вашему массиву строк.

Ответ 3

Ну, вы не указали язык, который используете, поэтому я дам вам общий ответ. У вас есть массив с кучей строк. Сначала я бы сделал весь строчный строчный регистр, а затем просто пропустил каждый символ в строке (запишите первый, оставив нижний регистр). На этом этапе вам нужно искать пространство, это поможет вам разделить слова в каждой строке. Первый символ после нахождения пробела, очевидно, является другим словом и должен быть капитализирован. Вы можете проверить, что следующее слово отсутствует, а также с помощью "Или".

Я не на компьютере, поэтому я не могу дать конкретный пример, но я надеюсь, что это будет в правильном направлении, по крайней мере