2016-10-11 2 views
0

У меня есть API, который возвращает строки, я хочу изменить формат этих строк, чтобы все слова были преобразованы в их первую букву + "." за исключением последнего слова, которое остается неизменным. Например, «Соединенные Штаты Америки» -----> «У. С. Америка» или «Реал Мадрид» ------> «Р. Мадрид». Может ли кто-нибудь помочь? Спасибо.Как изменить формат строки на аббревиатуру?

ответ

1
  • Раздельное ваша строка в и массив слов (разделенных " ")
  • Для этих слов, возможно отфильтровать предлоги и союзы (основано на вашем примере США)
  • 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.

+0

ты гениальный человек !!! Спасибо –

1

Вы можете использовать компоненты (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

Надежда, что помогает. Всего найлучшего.

+0

спасибо спасибо .. вы можете посмотреть на ответ «dfri» сверху тоже :) –

+0

@AymenBRomdhane - не проблема, dfri любезно перевел мой псевдокод в реальный код для вас! – Sparky

 Смежные вопросы

  • Нет связанных вопросов^_^