Как изменить формат строки на сокращение?

#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 любезно перевел мой псевдокод в реальный код для вас!