Quelle est la meilleure façon de tokeniser/splitter une NSString en Objective-C ?
Réponses
Trop de publicités?J'ai trouvé ça à http://borkware.com/quickies/one?topic=NSString (lien utile) :
NSString *string = @"oop:ack:bork:greeble:ponies";
NSArray *chunks = [string componentsSeparatedByString: @":"];
J'espère que cela vous aidera !
Adam
Tout le monde a mentionné componentsSeparatedByString:
mais vous pouvez aussi utiliser CFStringTokenizer
(n'oubliez pas qu'un NSString
et CFString
sont interchangeables) qui permettra de tokeniser les langues naturelles également (comme le chinois/japonais qui ne divise pas les mots par des espaces).
Si vos besoins en matière de tokenisation sont plus complexes, consultez mon kit d'outils Cocoa String tokenizing/parsing open source : ParseKit :
Pour une simple division de chaînes de caractères à l'aide d'un caractère de délimitation (comme ':'), ParseKit serait certainement trop compliqué. Mais encore une fois, pour des besoins complexes de tokenisation, ParseKit est extrêmement puissant/flexible.
Voir également le Documentation sur la tokénisation de ParseKit .
Si vous souhaitez effectuer une tokénisation sur plusieurs caractères, vous pouvez utiliser l'outil NSString componentsSeparatedByCharactersInSet
. NSCharacterSet dispose de quelques ensembles pratiques préétablis comme le whitespaceCharacterSet
et le illegalCharacterSet
. Et il possède des initialisateurs pour les plages Unicode.
Vous pouvez également combiner des jeux de caractères et les utiliser pour la tokénisation, comme ceci :
// Tokenize sSourceEntityName on both whitespace and punctuation.
NSMutableCharacterSet *mcharsetWhitePunc = [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy];
[mcharsetWhitePunc formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
NSArray *sarrTokenizedName = [self.sSourceEntityName componentsSeparatedByCharactersInSet:mcharsetWhitePunc];
[mcharsetWhitePunc release];
Sachez que componentsSeparatedByCharactersInSet
produira des chaînes vides s'il rencontre plus d'un membre du charSet dans une ligne, donc vous pourriez vouloir tester les longueurs inférieures à 1.
- Réponses précédentes
- Plus de réponses