У меня есть API, который возвращает строки, я хочу изменить формат этих строк, чтобы все слова были преобразованы в их первую букву + "." за исключением последнего слова, которое остается неизменным. Например, «Соединенные Штаты Америки» -----> «У. С. Америка» или «Реал Мадрид» ------> «Р. Мадрид». Может ли кто-нибудь помочь? Спасибо.Как изменить формат строки на аббревиатуру?
ответ
- Раздельное ваша строка в и массив слов (разделенных
" "
) - Для этих слов, возможно отфильтровать предлоги и союзы (основано на вашем примере США)
- Perform первый буквенный усечение всех но последнее слово
- Наконец, соедините усеченный список слов с eachother и последним (не усеченным) словом.
т.д .:
import Foundation
// help function used to fix cases where the places
// words are not correctly uppercased/lowercased
extension String {
func withOnlyFirstLetterUppercased() -> String {
guard case let chars = self.characters,
!chars.isEmpty else { return self }
return String(chars.first!).uppercased() +
String(chars.dropFirst()).lowercased()
}
}
func format(placeString: String) -> String {
let prepositionsAndConjunctions = ["and", "of"]
guard case let wordList = placeString.components(separatedBy: " ")
.filter({ !prepositionsAndConjunctions.contains($0.lowercased()) }),
wordList.count > 1 else { return placeString }
return wordList.dropLast()
.reduce("") { $0 + String($1.characters.first ?? Character("")).uppercased() + "." } +
" " + wordList.last!.withOnlyFirstLetterUppercased()
}
print(format(placeString: "United States of America")) // "U. S. America"
print(format(placeString: "uniTED states Of aMERIca")) // "U. S. America"
print(format(placeString: "Real Madrid")) // "R. Madrid"
print(format(placeString: "Trinidad and Tobago")) // "T. Tobago"
print(format(placeString: "Sweden")) // "Sweden"
Если вы знаете свои первоначальные места строки, чтобы быть правильно отформатирован w.r.t. верхний & нижний регистр, то вы можете изменить решение выше до менее подробного, например. удаление метода помощи в расширении String
.
Вы можете использовать компоненты (separatedBy: String), чтобы отделить каждую строку в и массив строк на основе пробелов между ними:
var str = "United States of America"
print(str.components(separatedBy: " ")) // Outputs ["United", "States", "of", "America"]
Тогда итерацию по этому массиву, вносящий изменения каждое слово, как вы хотите и добавления результат к переменной resultString. В вашем случае вы хотели бы взять только первую букву любого слова, которое не входит в предопределенную группу (например, «из», «и» и т. Д.), Сделать ее заглавной (с вызовом uppercased()) , объединить его с "." и добавьте его в свою строку. Когда вы дойдете до последнего элемента массива, просто добавьте слово как есть.
Вы можете найти больше на ЭТАЛ.ЗНАЧ: https://developer.apple.com/reference/swift/string
Надежда, что помогает. Всего найлучшего.
спасибо спасибо .. вы можете посмотреть на ответ «dfri» сверху тоже :) –
@AymenBRomdhane - не проблема, dfri любезно перевел мой псевдокод в реальный код для вас! – Sparky
ты гениальный человек !!! Спасибо –