#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
forresult
.