#swift #string #formatting #converter
#swift #строка #форматирование #конвертеры
Вопрос:
У меня есть API, который возвращает строки, я хочу изменить формат этих строк, чтобы все слова преобразовывались в их первую букву «.» за исключением последнего слова, которое остается неизменным. Например, «Соединенные Штаты Америки» ——> «США Америка» или «Реал Мадрид» ——> «Р. Мадрид» . Кто-нибудь может помочь, пожалуйста? Спасибо.
Ответ №1:
- Разделите вашу строку на и массив слов (разделенных
" "
символом) - Для этих слов, возможно, отфильтруйте предлоги и союзы (на основе вашего примера США)
- Выполните усечение первой буквы всех слов, кроме последнего
- Наконец, объедините усеченный список слов с каждым другим и последним (не усеченным) словом.
Например.:
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"
Если вы знаете, что ваши исходные строки должны быть правильно отформатированы в верхнем и нижнем регистре, то вы можете изменить приведенное выше решение на менее подробное, например, удалив метод справки в String
расширении.
Ответ №2:
Вы могли бы использовать компоненты (separatedBy: String) для разделения каждой строки на и массив строк на основе пробелов между ними:
var str = "United States of America"
print(str.components(separatedBy: " ")) // Outputs ["United", "States", "of", "America"]
Затем выполните итерацию по этому массиву, изменяя каждое слово по своему усмотрению и добавляя результат к переменной resultString . В вашем случае вы хотели бы взять только первую букву любого слова, которое не попадает в предопределенную группу (например, «of», «and» и т. Д.), Сделать его прописным (с помощью функции uppercased() ), объединить его с «.» и добавить егок вашей строке. Когда вы дойдете до последнего элемента массива, просто добавьте слово как есть.
Вы можете найти больше по ссылке разработчика: https://developer.apple.com/reference/swift/string
Надеюсь, это поможет. Всего наилучшего.
Комментарии:
1. спасибо, брат.. вы также можете посмотреть ответ «dfri» сверху 🙂
2. @AymenBRomdhane — нет проблем, dfri любезно перевел мой псевдокод в реальный код для вас!