147 votes

NSString tokenize en Objective-C

Quelle est la meilleure façon de tokeniser/splitter une NSString en Objective-C ?

278voto

Adam Alexander Points 10883

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

32voto

Matt Gallagher Points 10431

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).

21voto

Chris Hanson Points 34485

Si vous voulez simplement diviser une chaîne de caractères, utilisez -[NSString componentsSeparatedByString:] . Pour une tokenisation plus complexe, utilisez la classe NSScanner.

7voto

Todd Ditchendorf Points 5230

Si vos besoins en matière de tokenisation sont plus complexes, consultez mon kit d'outils Cocoa String tokenizing/parsing open source : ParseKit :

http://parsekit.com

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 .

6voto

Wienke Points 2682

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X