web-dev-qa-db-fra.com

Comment capturer les 4 derniers caractères de NSString

J'accepte un NSString aléatoire size d'un UITextField et je le passe à une méthode que je crée qui ne capturera que les 4 derniers caractères entrés dans le string.

J'ai parcouru la bibliothèque de référence de classe NSString et la seule vraie option que j'ai trouvée qui semble faire ce que je veux est

- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange

J'ai déjà utilisé cela une fois mais avec des paramètres statiques 'qui ne changent pas', mais pour cette implémentation, je veux utiliser des paramètres non statiques qui changent en fonction de la taille de la chaîne entrant.

Jusqu'à présent, c'est la méthode que j'ai créée qui passe un NSString d'un IBAction ailleurs où.

- (void)padString:(NSString *)funcString
{

    NSString *myFormattedString = [NSString stringWithFormat:@"%04d",[funcString intValue]]; // if less than 4 then pad string
    //   NSLog(@"my formatedstring = %@", myFormattedString);

    int stringLength = [myFormattedString length]; // captures length of string maybe I can use this on NSRange?


    //NSRange MyOneRange = {0, 1}; //<<-------- should I use this? if so how?

}
35
C.Johns

Utilisez la méthode substringFromIndex,

OBJ-C:

NSString *trimmedString=[string substringFromIndex:MAX((int)[string length]-4, 0)]; //in case string is less than 4 characters long.

Swift:

let trimmedString: String = (s as NSString).substringFromIndex(max(s.length-4,0))
94
KingofBliss

Essaye ça,

NSString *lastFourChar = [yourNewString substringFromIndex:[yourNewString length] - 4];
9
Yash Joshi

La réponse Swift fournie par KingOfBliss génère une erreur pour moi à partir de XCode 7.3, et ne doit pas être utilisée à l'avenir en raison du pontage vers les classes NS, qui devrait être supprimé dans Swift 3.0.

Un meilleur exemple qui considère une plage non valide, ainsi que la possibilité de caractères spéciaux pour fournir le bon endroit à supprimer:

La chaîne en question: Voulez-vous un café?

var trimmedString = "Voulez-vous un caf\u{65}\u{301}?"

let stringSize = trimmedString.characters.count
let startIndex = 4

if stringSize >= startIndex {
    let range = trimmedString.endIndex.advancedBy(-startIndex)..<trimmedString.endIndex
    trimmedString.removeRange(range)
}

Cela produira une réponse de Voulez-vous un c.

En accédant à la chaîne avec les valeurs d'index de début et de fin, vous vous protégez contre les situations où tous les caractères n'ont pas la même taille (ex: \u{65}\u{301})

0
CodeBender