Как получить подстроку NSString?

Если я хочу получить значение из значения NSString @"value:hello World:value" , что я должен использовать?

Возвращаемое значение, которое я хочу, это @"hello World" .

Опция 1:

 NSString *haystack = @"value:hello World:value"; NSString *haystackPrefix = @"value:"; NSString *haystackSuffix = @":value"; NSRange needleRange = NSMakeRange(haystackPrefix.length, haystack.length - haystackPrefix.length - haystackSuffix.length); NSString *needle = [haystack substringWithRange:needleRange]; NSLog(@"needle: %@", needle); // -> "hello World" 

Вариант 2:

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil]; NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)]; NSRange needleRange = [match rangeAtIndex: 1]; NSString *needle = [haystack substringWithRange:needleRange]; 

Это может быть немного выше всего по вашему довольно тривиальному делу.

Вариант 3:

 NSString *needle = [haystack componentsSeparatedByString:@":"][1]; 

Это создает три временных строки и массив при расщеплении.


Все fragmentы предполагают, что то, что искали, действительно содержится в строке.

Вот несколько менее сложный ответ:

 NSString *myString = @"abcdefg"; NSString *mySmallerString = [myString substringToIndex:4]; 

См. Также substringWithRange и substringFromIndex

Вот простая функция, которая позволяет вам делать то, что вы ищете:

 - (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator { NSRange firstInstance = [value rangeOfString:separator]; NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator]; NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location); return [value substringWithRange:finalRange]; } 

Применение:

 NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"]; 

Вот небольшая комбинация ответов @Regexident Option 1 и @Garett, чтобы получить мощную струнную резаку между префиксом и суффиксом, с надписью MORE … ANDMORE.

 NSString *haystack = @"MOREvalue:hello World:valueANDMORE"; NSString *prefix = @"value:"; NSString *suffix = @":value"; NSRange prefixRange = [haystack rangeOfString:prefix]; NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix]; NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location); NSString *needle = [haystack substringWithRange:needleRange]; NSLog(@"needle: %@", needle); 

Используйте это также

 NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)]; 

Примечание. Ваш NSMakeRange(start, end) должен быть NSMakeRange(start, end- start) NSMakeRange(start, end) NSMakeRange(start, end- start) ;

  • Прокрутка двумя пальцами с помощью UIScrollView
  • UITextView линейчатый фон, но неправильная высота строки
  • Как скопировать объект в объекте c
  • Изучение основ UIScrollView
  • Как получить счетчик ссылок NSObject?
  • UIImage от CALayer - iPhone SDK
  • Можно ли перепроектировать мое приложение iPhone?
  • Как сделать естественный вид на NSArray?
  • Как отключить горизонтальную прокрутку UIScrollView?
  • Могу ли я получить доступ к брелкам на iPhone?
  • Есть ли iPhone SDK API для твиттера?
  • Давайте будем гением компьютера.