8
votes

Obtenir le dernier mot d'un nstring

Comme le titre le suggère, j'aimerais obtenir le dernier mot d'un Nstring. Je pensais utiliser ce code: xxx

mais je pense que le Nsarray prendra un temps pour charger s'il est grand (et c'est grand), et cela ne reconnaîtrait pas un mot séparé par une virgule .

Merci d'avoir aidé!


0 commentaires

7 Réponses :


0
votes

Vous pouvez lire des symboles à partir de la fin de votre chaîne et les copier à l'index 0 à la chaîne de résultat. Que vous lisiez de l'espace ou une virgule, une chaîne de résultat contienne le dernier mot


0 commentaires

1
votes

La voie la plus efficace est susceptible de commencer à la fin de la chaîne, examiner chaque personnage pour voir s'il fait partie de ce que vous définissez comme un mot, puis extrayez le mot que vous souhaitez utiliser SubstringFromindex: ou SubstringWithRange: .


0 commentaires

12
votes

Donnez ceci un essai:

NSRange range = [someNSStringHere rangeOfString:@" " options:NSBackwardsSearch];
NSString *result = [someNSStringHere substringFromIndex:range.location+1];


2 commentaires

Je suis d'accord. Commencez à partir de la fin, un personnage à la fois, jusqu'à ce que vous atteigniez un espace, une virgule ou un autre délimiteur que vous pouvez prévoir.


Si @ "" est introuvable, vous pouvez utiliser la chaîne complète à la place. Je ferais ceci: Nsrange Plage = [SAVICING RangeOfstring: @ "" Options: NsbackwardSearch]; Nsstring * la norme nstring = sulsing; if (plage.location! = nsnotfound) {lawneword = [auto-substringfromindex: plage.location + 1]; } .



0
votes

Vous pouvez utiliser NSString S de la fonction rangeofsubstring: options: pour le déterminer. Par exemple:

Rechercher dans la chaîne d'espace, à l'aide d'une option de recherche en arrière pour lancer la recherche à partir de la fin de la chaîne.

Nsrange R = [String RangeFstring: @ "" Options: NsbackwardSearch];

Cela trouvera l'emplacement du dernier mot de la chaîne. Maintenant, obtenez la chaîne en utilisant SubstringWithRange: Par exemple:

nsrange trouvé = nsmakerange (nsmaxrange (r), string.length - Nsmaxrange (r)); Nstring * Foundstring = [Substring StringWithRange: Trouvé];

r est la plage de temps antérieure.

Veillez également à vous assurer que vous vérifiez r existe réellement. S'il n'y a que 1 mot dans la chaîne, alors r sera {nsnotfound, 0}

J'espère que je pourrais aider!

ben


0 commentaires

29
votes

Si vous voulez être super robuste: xxx

(ceci devrait également fonctionner avec des langues non romaines; iOS 4 + / OS X 10.6 +.)

Explication de base:

-Enumeratesubstringsinrage: Options: Utilisation d'une utilisation: Fait savoir ce qu'il dit sur l'étain: il énumère des sous-chaînes, qui sont définies par ce que vous passez dans les options. nsstringenumerationbywords dit "Je veux des mots qui me sont donnés", et nsstringenumerationReverse dit "Démarrer à la fin de la chaîne au lieu du début".

depuis Nous commençons à partir de la fin, le premier mot donné à nous dans substrant sera le dernier mot de la chaîne, donc nous définissons la norme à cela, puis définissez le bool pointé par STOP à Oui, de sorte que l'énumération s'arrête tout de suite.

La norme est bien sûr définie comme < code> __ bloquer afin que nous puissions la définir à l'intérieur du bloc et le voir à l'extérieur, et il est initialisé à nil donc si la chaîne a aucun mot (par exemple, si C'est vide ou est toute la ponctuation) Nous ne vous plantions pas lorsque nous essayons d'utiliser la norme .


2 commentaires

Merci beaucoup pour votre explication!


Belle solution. Ajoutez l'option NSString énumérer (CODE> Option localisée (prendre en compte les paramètres utilisateur actuels de la séparation des mots) Si vous souhaitez être très robuste. ;-)



3
votes

Si vous vouliez utiliser une expression régulière (qui peut être utile si vous souhaitez commencer à devenir plus compliqué en termes de ce que vous recherchez à la fin de votre chaîne), vous pouvez faire quelque chose comme:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\S+\\Z" options:0 error:nil];
NSTextCheckingResult *found = [regex firstMatchInString:inputString options:0 range:NSMakeRange(0, [inputString length])];

if (found.range.location != NSNotFound)
    result = [inputString substringWithRange:found.range];


0 commentaires

3
votes

cela fonctionne bien car il reconnaît également les symboles comme @ et # quel énumératesubstringsinrange: code> ne fait pas.

NSCharacterSet *charSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSArray *components = [someString componentsSeparatedByCharactersInSet:charSet];
NSString *lastWord = components.lastObject;


0 commentaires