2016-02-29 1 views
4

Vous voulez obtenir l'indice de la dernière occurrence de # mais le code ci-dessous fonctionne bien pour l'autre personnage, mais ne pas donner un résultat parfait pour particularité « # »dernière constatation Index (position) du caractère (#) dans NSString

Code Fonctionne correctement dans viewDidLoad mais ne fonctionne pas dans textfield shouldChangeCharactersInRange.

code:

txtTest.text = @"@ashish @test #vijay $4030 @post"; 


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    NSRange range = [textField.text rangeOfString:@"a" options:NSBackwardsSearch];   
    NSLog(@"a :: %d ",range.location); 

    range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
    NSLog(@"@ :: %d ",range.location); 

    range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
    NSLog(@"# :: %d",range.location); 

    range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
    NSLog(@"$ :: %d\n",range.location); 

} 

Résultat :: a :: 17 :: @ 26 # :: 2147483647 :: $ 20

enter image description here

+2

C'est 'NSNotFound'. Peut-être que les personnages ont la même apparence mais ne le sont pas, ou y a-t-il un espace de largeur nulle là-dedans? –

+0

Oui, il y a un caractère invisible dans votre chaîne '@" # "'. Utilisez les touches fléchées pour déplacer le curseur à travers et vous le verrez. –

+0

Copié et collé sur Xcode (ceci peut autoformer certaines choses, peut-être même encoder des choses). Correction de typo NSString sur la première ligne, fonctionne bien. – lupz

Répondre

3

Essayez% ld unsigned long à la place de% d. Son beau

NSString *str = @"ashish @test #vijay $4030 @post"; 

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch]; 
NSLog(@"a :: %lu ",(unsigned long)range.location); 

range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
NSLog(@"@ :: %lu ",(unsigned long)range.location); 

range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
NSLog(@"# :: %lu",(unsigned long)range.location); 

range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
NSLog(@"$ :: %lu\n",(unsigned long)range.location); 

un 17

:: @ :: 26

# 13 ::

$ :: 20

+0

Merci pour la réponse et dans viewDidLoad son travail bien mais dans shouldChangeCharactersInRange son ne fonctionne pas –

+0

Fonctionne bien dans shouldChangeCharactersInRange aussi. –

+0

Étrange mais son ne fonctionne pas dans ma machine :(j'avais également joint –

2

Tout d'abord, le travail que vous avez une erreur d'orthographe. C'est NSString *str, pas NSSting *str.

Le reste fonctionne bien sur ma machine.

NSString *str = @"ashish @test #vijay $4030 @post"; 

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch]; 
NSLog(@"a :: %lu ",range.location); 

range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
NSLog(@"@ :: %lu ",range.location); 

range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
NSLog(@"# :: %lu",range.location); 

range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
NSLog(@"$ :: %lu\n",range.location); 

réponse:

2016-02-29 15:19:39.554 StackOverflowDemo[9189:1825956] a :: 17 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] @ :: 26 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] # :: 13 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] $ :: 20 

Pouvez-vous en dire plus clairement?

+0

dans viewDidLoad son travail bien mais dans shouldChangeCharactersInRange son ne fonctionne pas :( –

+0

Avez-vous vérifié (et re-entrez) la chaîne comme indiqué dans le commentaire s?Vous avez un caractère «non standard» et les différents endroits l'indiquent clairement. – Eiko