Comment faire pour récupérer le énième caractère d'une chaine NSString ?

zenxzenx Membre
12:46 modifié dans API AppKit #1
Bonjour !

J'ai une chaine NSString *chaine = @ma chaine. Je souhaiterais récupérer par exemple le deuxième caractère de cette chaine (ici, le 'a' de 'ma') dans une autre variable NSString *car. Comment dois je m'y prendre ?.

Merci  ;)

Réponses

  • Eddy58Eddy58 Membre
    12:46 modifié #2
    Avec la méthode substringWithRange : :)
    [tt]
    NSString *car=[NSString stringWithString:[chaine substringWithRange:NSMakeRange(2,1)]];
    [/tt]
    :p :p
  • AliGatorAliGator Membre, Modérateur
    12:46 modifié #3
    Si c'est uniquement un seul caractère (et non pas une sous-chaà®ne), tu as aussi :
    characterAtIndex: (qui renvoie un unichar)
  • 12:46 modifié #4
    Oui enfin NSString *car=[chaine substringWithRange:NSMakeRange(2,1)] marche bien aussi...
  • elfelf Membre
    12:46 modifié #5
    Mais car est autoreleasé donc si tu veux le garder n'oublie pas retain
  • zenxzenx Membre
    12:46 modifié #6
    Merci beaucoup les gars !! 
  • zenxzenx Membre
    12:46 modifié #7
    J'ai une petite question :

    entre

    NSString *car=[chaine substringWithRange:NSMakeRange(2,1)];

    et

    NSString *car=[NSString stringWithString:[chaine substringWithRange:NSMakeRange(2,1)]];

    La différence est elle dans le fait que pour la première forme, l'objet n'est pas placé dans l'autorelease pool au contraire de la deuxième forme ?
  • BruBru Membre
    12:46 modifié #8
    dans 1135701904:

    entre
    NSString *car=[chaine substringWithRange:NSMakeRange(2,1)];
    et
    NSString *car=[NSString stringWithString:[chaine substringWithRange:NSMakeRange(2,1)]];
    La différence est elle dans le fait que pour la première forme, l'objet n'est pas placé dans l'autorelease pool au contraire de la deuxième forme ?


    Les 2 chaà®nes sont placées dans l'autoreleasePool.

    La première, car issue directement de substringWithRange:, et la seconde car issue de stringWithString: (et dont la chaà®ne en paramètre est elle-même dans l'autoreleasePool).

    De manière générale, tout objet qui est créé/retourné par une méthode de classe/d'instance, et dont cette méthode n'est pas init..., est dans l'autoreleasePool.

    .
  • AliGatorAliGator Membre, Modérateur
    12:46 modifié #9
    En gros avec la version longue, tu crées une NSString autoreleasée, et tu te sers de cette dernière pour créer une autre chaà®ne autoreleasée... autrement dit la 2e étape n'est pas nécessaire voire ne sert à  rien car n'apporte rien de plus ;)

    Dans les 2 cas c'est dans l'autoreleasepool, comme tout objet retourné par une fonction, à  part les init et autres cas particuliers qui sont mentionnés alors dans la doc.
    Ce n'est que si tu crées explicitement des objets avec alloc/init que tu es en charge de les releaser toi même... ou de les mettre toi même dans l'autoreleasepool.
Connectez-vous ou Inscrivez-vous pour répondre.