Строка с разрешенными символами

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Есть ли простой способ получить строку, содержащую только разрешенные символы?

например:

 NSString* myStr = @"a5amp;/Öñ33";
NSString* allowedChars = @"abcdefghijklmnopqrstuvwxyz0123456789";
NSString* result = [myStr stringWIthAllowedChrs:allowedChars];
  

теперь результат должен быть @"a533" ;

Ответ №1:

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

 // Create a character set with every character not in allowedChars
NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:allowedChars] invertedSet];
// Split the original string at any occurrence of those characters
NSArray *splitString = [myStr componentsSeparatedByCharactersInSet:charSet];
// Combine the result into a string
NSString *result = [splitString componentsJoinedByString:@""];
  

Ответ №2:

Простой и легкий в настройке и понимании подход:

 NSString* myStr = @"a5amp;/Öñ33";
NSString* allowedChars = @"abcdefghijklmnopqrstuvwxyz0123456789";
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:allowedChars] invertedSet];
NSString *result = myStr;
NSRange range = [result rangeOfCharacterFromSet:set];
while (range.location != NSNotFound)
{
    result = [result stringByReplacingCharactersInRange:range withString:@""];
    range = [result rangeOfCharacterFromSet:set];
}
NSLog(@"%@", result);
  

Ответ №3:

Один из самых простых-

 NSString* result = @"";

for(NSUInteger i = 0; i < [myStr length]; i  )
{
    unichar charArr[1] = {[myStr characterAtIndex:i]};
    NSString* charString = [NSString stringWithCharacters:charArr length:1];

    if([allowedChars rangeOfString:charString].location != NSNotFound)
        result = [result stringByAppendingString:charString];
}

return resu<
  

Комментарии:

1. Было бы намного лучше использовать NSMutableString for result .