Comme le titre le suggère, j'aimerais obtenir le dernier mot d'un Nstring.
Je pensais utiliser ce code: 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 . P> Merci d'avoir aidé! P> P>
7 Réponses :
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 p>
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: code > ou SubstringWithRange: code>. p>
Donnez ceci un essai:
NSRange range = [someNSStringHere rangeOfString:@" " options:NSBackwardsSearch]; NSString *result = [someNSStringHere substringFromIndex:range.location+1];
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 @ "" code> 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]; } code>.
Vous pouvez utiliser 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. P>
Cela trouvera l'emplacement du dernier mot de la chaîne. Maintenant, obtenez la chaîne en utilisant où Veillez également à vous assurer que vous vérifiez J'espère que je pourrais aider! p>
ben p> NSString code> S de la fonction rangeofsubstring: options: code> pour le déterminer. Par exemple: p>
Nsrange R = [String RangeFstring: @ "" Options: NsbackwardSearch]; Code> P>
SubstringWithRange: code> Par exemple: P>
nsrange trouvé = nsmakerange (nsmaxrange (r), string.length - Nsmaxrange (r));
Nstring * Foundstring = [Substring StringWithRange: Trouvé]; Code> P>
r code> est la plage de temps antérieure. P>
r code> existe réellement. S'il n'y a que 1 mot dans la chaîne, alors r code> sera {nsnotfound, 0} code> p>
Si vous voulez être super robuste: (ceci devrait également fonctionner avec des langues non romaines; iOS 4 + / OS X 10.6 +.) P> Explication de base: p> depuis Nous commençons à partir de la fin, le premier mot donné à nous dans -Enumeratesubstringsinrage: Options: Utilisation d'une utilisation: Code> 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 code> dit "Je veux des mots qui me sont donnés", et nsstringenumerationReverse code> dit "Démarrer à la fin de la chaîne au lieu du début". P> substrant code> sera le dernier mot de la chaîne, donc nous définissons la norme code> à cela, puis définissez le bool code> pointé par STOP code> à Oui, de sorte que l'énumération s'arrête tout de suite. p> La norme code> est bien sûr définie comme < code> __ bloquer code> afin que nous puissions la définir à l'intérieur du bloc et le voir à l'extérieur, et il est initialisé à nil code> donc si la chaîne a em> 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 code>. p> p>
Merci beaucoup pour votre explication!
Belle solution. Ajoutez l'option CODE> NSString énumérer (CODE> Option localisée CODE> (prendre en compte les paramètres utilisateur actuels de la séparation des mots) Si vous souhaitez être très robuste. ;-)
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];
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;