Ich will das:

var String1 = "Stack Over Flow"
var desiredOutPut = "SOF" // the first Character of each word in a single String (after space)

Ich weiß, wie man das erste Zeichen aus einer Zeichenfolge erhält, habe aber keine Ahnung, was ich mit diesem Problem tun soll.

10
user5625828 31 Dez. 2015 im 05:49

9 Antworten

Beste Antwort

Sie können diesen Code ausprobieren:

let stringInput = "First Last"
let stringInputArr = stringInput.componentsSeparatedByString(" ")
var stringNeed = ""

for string in stringInputArr {
    stringNeed = stringNeed + String(string.first!)
}

print(stringNeed)

Wenn Sie ein Problem mit componentsSeparatedByString haben, können Sie versuchen, nach Zeichen zu trennen und im Array fortzufahren. Sie entfernen alle leeren Zeichenfolgen.

Ich hoffe das hilft!

11
Dot Freelancer 20 Sept. 2018 im 09:37

Um es eleganter zu halten, würde ich eine Erweiterung für die schnelle 3.0 String-Klasse mit dem folgenden Code erstellen.

extension String
{
    public func getAcronyms(separator: String = "") -> String
    {
        let acronyms = self.components(separatedBy: " ").map({ String($0.characters.first!) }).joined(separator: separator);
        return acronyms;
    }
}

Nachworte können Sie einfach so verwenden:

  let acronyms = "Hello world".getAcronyms();
  //will print: Hw

  let acronymsWithSeparator = "Hello world".getAcronyms(separator: ".");
  //will print: H.w

  let upperAcronymsWithSeparator = "Hello world".getAcronyms(separator: ".").uppercased();
  //will print: H.W
9
Andrei A. 16 Feb. 2017 im 16:36

Oder mit .reduce():

let str = "Stack Over Flow"
let desiredOutPut = str
    .components(separatedBy: " ")
    .reduce("") { $0.0 + ($0.1.characters.first.map(String.init(_:)) ?? "") }

Alternative

let desiredOutPut = str
    .components(separatedBy: " ")
    .reduce("") { $0.0 + ($0.1.characters.first.map{ String($0) } ?? "") }
3
dfrib 2 Sept. 2017 im 13:59
Note that if you're experiencing error: 

'Reduzieren' kann nicht mit einer Argumentliste vom Typ '(String, (_) - & gt; _) aufgerufen werden

labelForContext.text = self.components(separatedBy: " ").reduce("") { first, next in 
     (first) + (next.first.map { String($0) } ?? "")
}
2
Ty Daniels 24 Juli 2018 im 20:55

Sie können componentsSeparatedByString() Methode, um ein Array von Zeichenfolgen abzurufen. Verwenden Sie " " als Trennzeichen.

Da Sie wissen, wie Sie das erste Zeichen einer Zeichenfolge abrufen, tun Sie dies jetzt nur für jede Zeichenfolge im Array.

0
i_am_jorf 31 Dez. 2015 im 02:54
var String1 = "Stack Over Flow"
let arr = String1.componentsSeparatedByString(" ")
var desiredoutput = ""
for str in arr {
    if let char = str.characters.first {
        desiredoutput += String(char)
    }
}
desiredoutput

Übrigens ist die Konvention für Variablennamen meines Erachtens Kamel-Groß- und Kleinschreibung mit einem Kleinbuchstaben für das erste Zeichen, wie "string1" im Gegensatz zu "String1".

0
SwiftMatt 31 Dez. 2015 im 03:16

Hier sind die Änderungen in swift3

      let stringInput = "Stack Overflow"
      let stringInputArr = stringInput.components(separatedBy: " ")
      var stringNeed = ""

      for string in stringInputArr {
           stringNeed = stringNeed + String(string.characters.first!)
      }

      print(stringNeed)
0
Azharhussain Shaikh 8 März 2017 im 05:26

Der Vollständigkeit halber ist dies eine Lösung mit sehr leistungsfähigen enumerateSubstrings(in:options:_:

let string = "Stack Over Flow"

var result = ""
string.enumerateSubstrings(in: string.startIndex..<string.endIndex, options: .byWords) { (substring, _, _, _) in
    if let substring = substring { result += substring.prefix(1) }
}
print(result)
0
vadian 24 Juli 2018 im 21:03
let inputString = "ABC PQR XYZ"
var stringNeed = ""

class something
{
        let splits = inputString.components(separatedBy: " ")
        for string in splits
        {
            stringNeed = stringNeed + String(string.first!)      
        }
        print(stringNeed)
}
0
Eugenio 26 Nov. 2019 im 09:17