Disons que j'ai une chaîne ici:
var fullName: String = "First Last"
Je souhaite diviser la base de chaîne sur un espace blanc et affecter les valeurs à leurs variables respectives
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
De plus, il arrive que les utilisateurs n'aient pas de nom de famille.
fullName.utf8.split( <utf-8 character code> )
fonctionne également (remplacez.utf8
par.utf16
pour UTF-16). Par exemple, le fractionnement+
pourrait être effectué à l'aide defullName.utf8.split(43)
Réponses:
La manière Swift est d'utiliser la
split
fonction globale , comme ceci:avec Swift 2
Dans Swift 2, l'utilisation du fractionnement devient un peu plus compliquée en raison de l'introduction du type interne CharacterView. Cela signifie que String n'adopte plus les protocoles SequenceType ou CollectionType et vous devez plutôt utiliser la
.characters
propriété pour accéder à une représentation de type CharacterView d'une instance de String. (Remarque: CharacterView adopte les protocoles SequenceType et CollectionType).la source
split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false)
.componentsSeparatedByString()
méthode si votre séparateur est plus long qu'un seul caractère. Et aussi cool que ce serait de direlet (firstName, lastName) = split(fullName) {$0 == ' '}
, cela ne fonctionne pas, malheureusement.split("a,b;c,d") {$0 == "," || $0 == ";"}
ousplit("a,b;c,d") {contains(",;", $0)}
Appelez simplement la
componentsSeparatedByString
méthode sur votrefullName
Mise à jour pour Swift 3+
la source
NSString
(Swift les échange automatiquement lors de l'importationFoundation
).[String]
) dans Xcode 7.2.La méthode la plus simple pour ce faire consiste à utiliser componentsSeparatedBy:
Pour Swift 2:
Pour Swift 3:
la source
.componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
componentsSeparatedByString
etcomponentsSeparatedByCharactersInSet
Swift Dev. 4.0 (24 mai 2017)
Une nouvelle fonction
split
dans Swift 4 ( Beta ).Production:
Accès aux valeurs:
Xcode 8.1 / Swift 3.0.1
Voici la façon dont plusieurs délimiteurs avec tableau.
Production:
la source
import Foundation
à la classe dans laquelle vous utilisez ceci. #SavedYouFiveMinuteslet a="a,,b,c"
et que vous utilisez,a.split(separator: ",")
vous obtenez un tableau comme["a", "b", c"]
par défaut. Cela peut être modifié en utilisantomittingEmptySubsequences: false
ce qui est vrai par défaut.Swift 4 ou version ultérieure
Si vous avez juste besoin de formater correctement un nom de personne, vous pouvez utiliser PersonNameComponentsFormatter .
éditer / mettre à jour:
Swift 5 ou version ultérieure
Pour séparer simplement une chaîne par des caractères non alphabétiques, nous pouvons utiliser la nouvelle propriété Character
isLetter
:la source
fullName.split { $0.isWhitespace }.map(String.init)
let words = line.split{ $0.isWhitespace }.map{ String($0)}
Merci @LeoDabus pour votre version (mon commentaire d'origine avait du code manquant). Je suggère également de déplacer la version Swift 5 en haut de la réponse.Comme alternative à la réponse de WMios, vous pouvez également utiliser
componentsSeparatedByCharactersInSet
, ce qui peut être pratique dans le cas où vous avez plus de séparateurs (espace vide, virgule, etc.).Avec votre contribution spécifique:
Utilisation de plusieurs séparateurs:
la source
,
ou;
ou tout autre séparateurSwift 4
la source
La question des espaces blancs
Généralement, les gens réinventent ce problème et les mauvaises solutions encore et encore. Est-ce un espace? "" et qu'en est-il de "\ n", "\ t" ou d'un espace blanc unicode que vous n'avez jamais vu, en grande partie parce qu'il est invisible. Alors que vous pouvez vous en sortir avec
Une solution faible
Si jamais vous avez besoin de vous affranchir de la réalité, regardez une vidéo de la WWDC sur les chaînes ou les dates. En bref, il est presque toujours préférable de permettre à Apple de résoudre ce genre de tâche banale.
Solution robuste: utilisez NSCharacterSet
La façon de procéder correctement, à mon humble avis, est d'utiliser
NSCharacterSet
car, comme indiqué précédemment, votre espace n'est peut-être pas ce que vous attendez et Apple a fourni un jeu de caractères d'espace. Pour explorer les différents jeux de caractères fournis, consultez la documentation du développeur NSCharacterSet d'Apple puis seulement alors, augmentez ou construisez un nouveau jeu de caractères s'il ne correspond pas à vos besoins.NSCharacterSet espaces blancs
la source
Dans Swift 4.2 et Xcode 10
Option 1
Option 2
Option 3
Option 4
Par la documentation Apple ....
la source
Swift 4 facilite beaucoup le fractionnement des caractères, utilisez simplement la nouvelle fonction de fractionnement pour les chaînes.
Exemple:
let s = "hi, hello" let a = s.split(separator: ",") print(a)
Maintenant, vous avez un tableau avec «salut» et «bonjour».
la source
Mise à jour pour Swift 5 et la manière la plus simple
Cela imprime,
Cependant, si vous souhaitez filtrer les chaînes vides,
Production,
Mais assurez-vous que la Fondation est importée
la source
Swift 3
AAA
,BBB
etCCC
.whitespaces
par.whitespacesAndNewlines
la source
Swift 4, Xcode 10 et iOS 12 Update fonctionnent à 100%
Voir la documentation d'Apple ici pour plus d'informations.
la source
Xcode 8.0 / Swift 3
Long chemin:
la source
J'ai eu un scénario où plusieurs caractères de contrôle peuvent être présents dans la chaîne que je souhaite fractionner. Plutôt que de maintenir un tableau de ces derniers, je laisse juste Apple gérer cette partie.
Les éléments suivants fonctionnent avec Swift 3.0.1 sur iOS 10:
la source
J'ai trouvé un cas intéressant, celui
méthode 1
Lorsque j'ai utilisé cette commande pour séparer un symbole des données chargées à partir du serveur , il peut se diviser pendant le test dans le simulateur et se synchroniser avec l'appareil de test, mais il ne se divisera pas dans l'application de publication et Ad Hoc
Cela me prend beaucoup de temps pour suivre cette erreur, elle pourrait être maudite à partir d'une version Swift, ou d'une version iOS ou ni
Il ne s'agit pas non plus du code HTML, car j'essaie de stringByRemovingPercentEncoding et cela ne fonctionne toujours pas
ajout 10/10/2015
dans Swift 2.0, cette méthode a été remplacée par
méthode 2
Lorsque j'ai utilisé cette commande, elle peut diviser les mêmes données qui se chargent correctement à partir du serveur
Conclusion, je suggère vraiment d'utiliser la méthode 2
la source
La plupart de ces réponses supposent que l'entrée contient un espace - pas un espace blanc , et un seul espace à cela. Si vous pouvez faire cette hypothèse en toute sécurité, alors la réponse acceptée (de bennett) est assez élégante et aussi la méthode que j'utiliserai quand je le pourrai.
Lorsque nous ne pouvons pas faire cette hypothèse, une solution plus robuste doit couvrir les situations suivantes que la plupart des réponses ici ne prennent pas en compte:
\n
) et Windows (\r\n
)Pour couvrir ces cas, cette solution utilise l'expression régulière pour convertir tous les espaces (y compris les caractères de nouvelle ligne récurrents et Windows) en un seul espace, les découpes, puis les divise par un seul espace:
Swift 3:
la source
Ou sans fermetures, vous pouvez le faire dans Swift 2:
la source
Étapes pour diviser une chaîne en un tableau dans Swift 4.
Remarque: variableName.components (separedPar: "split keyword")
la source
Swift 4
Production
la source
Disons que vous avez une variable nommée "Hello World" et si vous voulez la diviser et la stocker en deux variables différentes, vous pouvez utiliser comme ceci:
la source
Cela donne directement un tableau de pièces scindées
alors vous pouvez utiliser comme ça,
la source
Seule
split
est la bonne réponse, voici la différence pour plus de 2 espaces.la source
Xcode 7.2 (7C68)
la source
Swift 2.2 Gestion des erreurs et chaîne capitalisée Ajouté:
la source
La gestion des chaînes est toujours un défi dans Swift et elle continue de changer de manière significative, comme vous pouvez le voir dans d'autres réponses. Espérons que les choses se calmeront et que cela deviendra plus simple. C'est la façon de le faire avec la version 3.0 actuelle de Swift avec plusieurs caractères de séparation.
Swift 3:
la source
Je cherchais un fractionnement lâche , tel que PHP
explode
où des séquences vides sont incluses dans le tableau résultant, cela a fonctionné pour moi:Production:
la source
Cela a encore changé en Bêta 5. Weee! C'est maintenant une méthode sur CollectionType
Vieux:
Nouveau:
Notes de version des pommes
la source
Pour swift 2, XCode 7.1:
la source
Voici un algorithme que je viens de construire, qui divisera a
String
par anyCharacter
du tableau et si vous souhaitez conserver les sous-chaînes avec des caractères fractionnés, vous pouvez définir leswallow
paramètre surtrue
.Xcode 7.3 - Swift 2.2:
Exemple:
la source