2013-05-31 10 views
17

Nella mia appCome determinare se il primo carattere di una NSString è una lettera

ho bisogno di sapere se il primo carattere di una stringa è una lettera o no

Im ottenendo primo carattere la stringa come questa

NSString *codeString; 
NSString *firstLetter = [codeString substringFromIndex:1]; 

Posso conoscerlo confrontando con a, b, c,. **.

if([firstLetter isEqualToString "a"] || ([firstLetter isEqualToString "A"] || ([firstLetter isEqualToString "b"] ......) 

Ma c'è qualche altro metodo per sapere?

Ho bisogno di visualizzare colori diversi per lettere e simboli.

Come posso ottenerlo in modo semplice?

risposta

77

Prima di tutto, la vostra linea:

NSString *firstLetter = [codeString substringFromIndex:1]; 

non ottiene la prima lettera. Questo ti dà una nuova stringa che contiene tutta la stringa originale ECCETTO il primo carattere. Questo è l'opposto di quello che vuoi. Si desidera:

NSString *firstLetter = [codeString substringToIndex:1]; 

Ma c'è un modo migliore per vedere se il primo carattere è una lettera o meno.

unichar firstChar = [[codeString uppercaseString] characterAtIndex:0]; 
if (firstChar >= 'A' && char <= 'Z') { 
    // The first character is a letter from A-Z or a-z 
} 

Tuttavia, dal momento che iOS accordo con gli utenti internazionali, è tutt'altro che ideale per guardare semplicemente per il personaggio di essere nelle lettere A-Z. Un approccio migliore potrebbe essere:

unichar firstChar = [codeString characterAtIndex:0]; 
NSCharacterSet *letters = [NSCharacterSet letterCharacterSet]; 
if ([letters characterIsMember:firstChar]) { 
    // The first character is a letter in some alphabet 
} 

Ci sono alcuni casi in cui questo non funziona come previsto. unichar contiene solo caratteri a 16 bit. Ma i valori NSString possono effettivamente contenere alcuni caratteri a 32 bit. Gli esempi includono molti personaggi Emoji. Quindi è possibile che questo codice possa dare un falso positivo. Idealmente si vorrebbe fare questo:

NSRange first = [codeString rangeOfComposedCharacterSequenceAtIndex:0]; 
NSRange match = [codeString rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] options:0 range:first]; 
if (match.location != NSNotFound) { 
    // codeString starts with a letter 
}   
Problemi correlati