it-roy-ru.com

Как получить один символ NSString из NSString

Я хочу получить персонажа изнутри строки NSString. Я хочу, чтобы результат был NSString.

Это код, который я использую, чтобы получить один символ при индексировании:

[[s substringToIndex:i] substringToIndex:1]

Есть ли лучший способ сделать это?

67
node ninja

Это также извлечет символ с индексом i как NSString, и вы используете только структуру NSRange, а не дополнительную NSString.

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

Если вы просто хотите получить один символ из строки NSString, вы можете попробовать это.

- (unichar)characterAtIndex:(NSUInteger)index;

Используется так:

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

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

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;

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

Быть полностью юникодным - это немного работы, но зависит от того, какие языки вы используете. Я вижу много азиатских текстов, поэтому большинство персонажей перетекают из одного места, поэтому мне нужно выполнить эту работу.

23
No one in particular
NSMutableString *myString=[NSMutableString stringWithFormat:@"Malayalam"];
NSMutableString *[email protected]"";

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