2013-05-11 4 views

ответ

-1

Вы можете использовать, как это,

for (int i=0; i < [myString length]; i++) { 
    ... [myString characterAtIndex:i] 
    // You can then decide how to assign a value to each individual string, via a switch. 

} 
6

В зависимости от ваших потребностей, вы можете перечислить строку по сложенных символов, который принимает во внимание различные способы кодирования символов с диакритическими знаками.

Это не может быть большой проблемой, но если вы используете enumerateSubstringsInRange:options:usingBlock:, по крайней мере, он обрабатывается. Код может выглядеть следующим образом:

NSMutableArray *result; 

NSString *string = @"Genève, Zu\u0308rich, Bellinzona"; 
//       ^
//  What humans know as: Zürich 

result = [NSMutableArray array]; 
[string enumerateSubstringsInRange: NSMakeRange(0,string.length) 
          options: NSStringEnumerationByComposedCharacterSequences 
         usingBlock: ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){ 
          // If you want to see the way the string has been split 
          NSLog(@"%@", substring); 
          [result addObject: substring]; 
         } 
]; 

Обратите внимание, что «е» один символ, но «ü» закодирован как составленному характер. Оба они все еще правильно идентифицированы для использования в цикле. Если вы используете characterAtIndex:, «ü» будет разделен на две части (u и ¨), что, скорее всего, не то, что вы хотите.

+0

Очень хороший ответ. Многие люди просто забывают о не-ASCII-символах и игнорируют все сложные правила, как строки могут быть составлены (например, читать формы нормализации Unicode). –

Смежные вопросы