Angenommen, ich habe hier eine Zeichenfolge:
var fullName: String = "First Last"
Ich möchte die Zeichenfolgenbasis auf Leerzeichen aufteilen und die Werte ihren jeweiligen Variablen zuweisen
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Manchmal haben Benutzer auch keinen Nachnamen.
fullName.utf8.split( <utf-8 character code> )
Werken wie auch (ersetzen.utf8
mit.utf16
UTF-16). Zum Beispiel+
könnte das Aufteilen mitfullName.utf8.split(43)
Antworten:
Der schnelle Weg besteht darin, die globale
split
Funktion wie folgt zu verwenden :mit Swift 2
In Swift 2 wird die Verwendung von Split aufgrund der Einführung des internen CharacterView-Typs etwas komplizierter. Dies bedeutet, dass String die Protokolle SequenceType oder CollectionType nicht mehr übernimmt und Sie stattdessen die
.characters
Eigenschaft verwenden müssen, um auf eine CharacterView-Typdarstellung einer String-Instanz zuzugreifen. (Hinweis: CharacterView verwendet die Protokolle SequenceType und CollectionType.)quelle
split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false)
.componentsSeparatedByString()
Methode verwenden müssen, wenn Ihr Trennzeichen länger als ein einzelnes Zeichen ist. Und so cool es auch seinlet (firstName, lastName) = split(fullName) {$0 == ' '}
mag, das funktioniert leider nicht.split("a,b;c,d") {$0 == "," || $0 == ";"}
odersplit("a,b;c,d") {contains(",;", $0)}
Rufen
componentsSeparatedByString
Sie einfach die Methode auf IhremfullName
Update für Swift 3+
quelle
NSString
(Swift tauscht sie beim Import automatisch ausFoundation
).[String]
) in Xcode 7.2.Die einfachste Methode hierfür ist die Verwendung von componentsSeparatedBy:
Für Swift 2:
Für Swift 3:
quelle
.componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
componentsSeparatedByString
undcomponentsSeparatedByCharactersInSet
Swift Dev. 4,0 (24. Mai 2017)
Eine neue Funktion
split
in Swift 4 ( Beta ).Ausgabe:
Zugriff auf Werte:
Xcode 8.1 / Swift 3.0.1
Hier ist die Art und Weise mehrere Trennzeichen mit Array.
Ausgabe:
quelle
import Foundation
Stellen Sie sicher, dass Sie der Klasse hinzufügen, in der Sie dies verwenden. #SavedYouFiveMinuteslet a="a,,b,c"
und verwenden, erhaltena.split(separator: ",")
Sie["a", "b", c"]
standardmäßig ein Array wie . Dies kann geändert werdenomittingEmptySubsequences: false
, indem standardmäßig true verwendet wird.Swift 4 oder höher
Wenn Sie nur einen Personennamen richtig formatieren müssen, können Sie PersonNameComponentsFormatter verwenden .
bearbeiten / aktualisieren:
Swift 5 oder höher
Um eine Zeichenfolge nur durch Nicht-Buchstaben-Zeichen zu teilen, können Sie die neue Character-Eigenschaft verwenden
isLetter
:quelle
fullName.split { $0.isWhitespace }.map(String.init)
let words = line.split{ $0.isWhitespace }.map{ String($0)}
Folgendes : Danke @LeoDabus für Ihre Version (in meinem ursprünglichen Kommentar fehlte Code). Außerdem schlage ich vor, die Swift 5-Version an den Anfang der Antwort zu verschieben.Als Alternative zur Antwort von WMios können Sie auch verwenden
componentsSeparatedByCharactersInSet
, was nützlich sein kann, wenn Sie mehr Trennzeichen (Leerzeichen, Komma usw.) haben.Mit Ihrer spezifischen Eingabe:
Verwenden mehrerer Trennzeichen:
quelle
,
oder;
oder anderem SeparatorSwift 4
quelle
Das Whitespace-Problem
Im Allgemeinen erfinden die Menschen dieses Problem und schlechte Lösungen immer wieder neu. Ist das ein Raum? "" und was ist mit "\ n", "\ t" oder einem Unicode-Leerzeichen, das Sie noch nie gesehen haben, nicht zuletzt, weil es unsichtbar ist. Während Sie mit durchkommen können
Eine schwache Lösung
Wenn Sie jemals die Realität in den Griff bekommen müssen, schauen Sie sich ein WWDC-Video mit Zeichenfolgen oder Daten an. Kurz gesagt, es ist fast immer besser, Apple zu erlauben, diese Art von weltlicher Aufgabe zu lösen.
Robuste Lösung: Verwenden Sie NSCharacterSet
Der Weg, dies richtig zu machen, IMHO, ist zu verwenden,
NSCharacterSet
da, wie bereits erwähnt, Ihr Leerzeichen möglicherweise nicht Ihren Erwartungen entspricht und Apple einen Leerzeichen-Zeichensatz bereitgestellt hat. Informationen zu den verschiedenen bereitgestellten Zeichensätzen finden Sie in der Entwicklerdokumentation zu NSCharacterSet von Apple. Erweitern oder erstellen Sie erst dann einen neuen Zeichensatz, wenn er nicht Ihren Anforderungen entspricht.NSCharacterSet Whitespaces
quelle
In Swift 4.2 und Xcode 10
Option 1
Option 2
Option 3
Option 4
Von Apple Documentation ....
quelle
Swift 4 erleichtert das Teilen von Zeichen erheblich. Verwenden Sie einfach die neue Funktion zum Teilen von Zeichenfolgen.
Beispiel:
let s = "hi, hello" let a = s.split(separator: ",") print(a)
Jetzt hast du ein Array mit 'hi' und 'hallo'.
quelle
Update für Swift 5 und der einfachste Weg
Dies druckt,
Wenn Sie jedoch eine leere Zeichenfolge herausfiltern möchten,
Ausgabe,
Stellen Sie jedoch sicher, dass Foundation importiert wird
quelle
Swift 3
AAA
,BBB
undCCC
.whitespaces
durch.whitespacesAndNewlines
quelle
Swift 4, Xcode 10 und iOS 12 Update funktionieren zu 100%
Weitere Informationen finden Sie in der Apple-Dokumentation .
quelle
Xcode 8.0 / Swift 3
Langer Weg:
quelle
Ich hatte ein Szenario, in dem mehrere Steuerzeichen in der Zeichenfolge vorhanden sein können, die ich teilen möchte. Anstatt ein Array davon zu pflegen, lasse ich Apple nur diesen Teil erledigen.
Folgendes funktioniert mit Swift 3.0.1 unter iOS 10:
quelle
Ich habe einen interessanten Fall gefunden
Methode 1
Als ich diesen Befehl verwendet habe, um ein Symbol von den vom Server geladenen Daten zu trennen , kann es während des Tests im Simulator geteilt und mit dem Testgerät synchronisiert werden, aber nicht in der Veröffentlichungs-App und Ad-hoc
Ich brauche viel Zeit, um diesen Fehler zu verfolgen. Er könnte von einer Swift-Version oder einer iOS-Version oder von keiner verflucht sein
Es geht auch nicht um den HTML-Code, da ich versuche, stringByRemovingPercentEncoding zu verwenden, und es immer noch nicht funktioniert
Ergänzung 10.10.2015
In Swift 2.0 wurde diese Methode geändert
Methode 2
Wenn ich diesen Befehl verwendet habe, kann er dieselben Daten aufteilen, die vom Server korrekt geladen wurden
Fazit, ich schlage wirklich vor, die Methode 2 zu verwenden
quelle
Die meisten dieser Antworten übernehmen die Eingabe ein Leerzeichen enthält - nicht weiß Raum, und einen einzigen Raum dazu. Wenn Sie diese Annahme sicher treffen können, dann ist die akzeptierte Antwort (von bennett) ziemlich elegant und auch die Methode, mit der ich gehen werde, wenn ich kann.
Wenn wir diese Annahme nicht treffen können, muss eine robustere Lösung die folgenden Situationen abdecken, die die meisten Antworten hier nicht berücksichtigen:
\n
) und Windows (\r\n
) ZeilenumbruchzeichenUm diese Fälle abzudecken, verwendet diese Lösung Regex, um alle Leerzeichen (einschließlich wiederkehrender und Windows-Zeilenumbruchzeichen) in ein einzelnes Leerzeichen zu konvertieren, zu schneiden und dann durch ein einzelnes Leerzeichen zu teilen:
Swift 3:
quelle
Oder ohne Verschlüsse können Sie genau dies in Swift 2 tun:
quelle
Schritte zum Aufteilen eines Strings in ein Array in Swift 4.
Hinweis: variableName.components (separateBy: "split keyword")
quelle
Swift 4
Ausgabe
quelle
Angenommen, Sie haben eine Variable mit dem Namen "Hello World". Wenn Sie sie aufteilen und in zwei verschiedene Variablen speichern möchten, können Sie sie folgendermaßen verwenden:
quelle
Xcode 7.2 (7C68)
quelle
Swift 2.2 Fehlerbehandlung & großgeschriebener String Hinzugefügt:
quelle
Die Handhabung von Zeichenfolgen ist in Swift immer noch eine Herausforderung und ändert sich erheblich, wie Sie anhand anderer Antworten sehen können. Hoffentlich beruhigen sich die Dinge und es wird einfacher. Dies ist der Weg mit der aktuellen Version 3.0 von Swift mit mehreren Trennzeichen.
Swift 3:
quelle
Ich suchte nach einem lockeren Split, wie z. B. PHPs , bei
explode
denen leere Sequenzen im resultierenden Array enthalten sind. Dies funktionierte für mich:Ausgabe:
quelle
Dies ergibt eine Reihe von geteilten Teilen direkt
dann kannst du so verwenden,
quelle
Nur das
split
ist die richtige Antwort, hier ist der Unterschied für mehr als 2 Leerzeichen.quelle
Dies hat sich in Beta 5 erneut geändert. Weee! Es ist jetzt eine Methode für CollectionType
Alt:
Neu:
Versionshinweise zu Äpfeln
quelle
Für Swift 2 XCode 7.1:
quelle
Hier ist ein Algorithmus, den ich gerade erstellt habe, der a
String
durch einen beliebigen TeilCharacter
des Arrays aufteilt. Wenn Sie die Teilzeichenfolgen mit geteilten Zeichen behalten möchten, können Sie denswallow
Parameter auf setzentrue
.Xcode 7.3 - Swift 2.2:
Beispiel:
quelle