2016-10-11 3 views
0

Ich habe eine API, die Strings zurückgibt, ich möchte das Format dieser Zeichenfolgen so ändern, dass alle Wörter in ihren ersten Buchstaben umgewandelt werden + "." bis auf das letzte Wort, das gleich bleibt. Zum Beispiel "Vereinigte Staaten von Amerika" -----> "USA" oder "Real Madrid" ------> "R. Madrid". Kann mir bitte jemand helfen? Danke.Wie ändert man das String-Format in eine Abkürzung?

Antwort

1
  • Separate Zeichenfolge in und Array von Wörtern (getrennt durch " ")
  • Für diesen Worten möglicherweise Präpositionen und Konjunktionen herauszufiltern (basierend auf dem Beispiel von US)
  • Führen ersten Buchstaben Abschneiden aller aber das letzte Wort
  • Schließlich, trenne Liste von Wörtern mit einander und dem letzten (nicht abgeschnittenen) Wort.

Z. B .:

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" 

Wenn Sie Ihre ursprüngliche Orte Strings wissen w.r.t. richtig formatiert werden Obere & Kleinbuchstaben, dann können Sie die obige Lösung zu einer weniger ausführlichen ändern, z. Entfernen der Hilfemethode in der String Erweiterung.

+0

du bist genialer mann !!! danke: D –

1

könnten Sie verwenden Komponenten (separatedBy: String) jede Zeichenfolge in und Array von Strings zu trennen basierend auf dem Leerzeichen zwischen ihnen:

var str = "United States of America" 

print(str.components(separatedBy: " ")) // Outputs ["United", "States", "of", "America"] 

Dann durch dieses Array durchlaufen, zur Änderung der jedes Wort, wie Sie wollen und Anhängen das Ergebnis zu einer variablen resultString. In Ihrem Fall möchten Sie nur den ersten Buchstaben eines Wortes, das nicht in eine vordefinierte Gruppe fällt (wie "von", "und" usw.), in Großbuchstaben schreiben (mit einem Aufruf in Großbuchstaben()). Verkettung mit "." und an deine Zeichenfolge anhängen. Wenn Sie zum letzten Element des Arrays gelangen, fügen Sie einfach das Wort so an, wie es ist.

Sie können mehr an den Entwickler Referenz finden: https://developer.apple.com/reference/swift/string

Hoffnung, das hilft. Alles bestens.

+0

Dank bro .. Sie können "dfri" Antwort auf der Oberseite auch aussehen :) –

+0

@AymenBRomdhane - kein Problem, dfri freundlicherweise übersetzt meine Pseudocode in tatsächlichen Code für Sie! – Sparky