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.
9 Antworten
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!
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
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) } ?? "") }
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) } ?? "")
}
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.
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".
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)
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)
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)
}
Verwandte Fragen
Neue Fragen
ios
iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die zugehörigen Tags [Objective-C] und [Swift] für Probleme, die für diese Programmiersprachen spezifisch sind.