web-dev-qa-db-fra.com

Comment obtenir un seul caractère NSString d'un NSString

Je veux obtenir un personnage quelque part à l'intérieur d'une chaîne NSString. Je veux que le résultat soit un NSString.

C’est le code que j’utilise pour obtenir un seul caractère à l’index:

[[s substringToIndex:i] substringToIndex:1]

Y a-t-il une meilleure façon de le faire?

67
node ninja

Cela permettra également de récupérer un caractère à l'index i en tant que NSString, et vous n'utilisez qu'une structure NSRange plutôt qu'un NSString supplémentaire.

NSString * newString = [s substringWithRange:NSMakeRange(i, 1)];
129
Kris Markel

Si vous voulez juste obtenir un caractère d'un NSString, vous pouvez essayer ceci.

- (unichar)characterAtIndex:(NSUInteger)index;

Utilisé comme tel:

NSString *originalString = @"hello";
int index = 2;
NSString *theCharacter = [NSString stringWithFormat:@"%c", [originalString characterAtIndex:index-1]];
//returns "e".
36
joshualmf

Votre suggestion ne fonctionne que pour des caractères simples comme ASCII. NSStrings stocke unicode et si votre personnage a plusieurs unichars de long, vous pourriez vous retrouver avec du charabia. Utilisation 

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;

si vous voulez déterminer le nombre de unichars de votre personnage. J'utilise ceci pour parcourir mes chaînes afin de déterminer l'emplacement des bordures de caractères.

Être complètement unicode est un peu de travail mais dépend des langues que vous utilisez. Je vois beaucoup de textes asiatiques, alors la plupart des caractères se déplacent d'un espace à l'autre et c'est donc un travail que je dois faire.

23
NSMutableString *myString=[NSMutableString stringWithFormat:@"Malayalam"];
NSMutableString *revString=@"";

for (int i=0; i<myString.length; i++) {
    revString=[NSMutableString stringWithFormat:@"%c%@",[myString characterAtIndex:i],revString];
}
NSLog(@"%@",revString);
0
Neeraj Jerauld