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

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

Я хочу получить возвращаемое значение @"hello World".

73 голоса | спросил Csabi 15 PMpFri, 15 Apr 2011 15:37:32 +040037Friday 2011, 15:37:32

5 ответов


0

Вариант 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];

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


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

ответил Regexident 15 PMpFri, 15 Apr 2011 15:39:12 +040039Friday 2011, 15:39:12
0

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

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

См. также substringWithRange и substringFromIndex

ответил Shaun Neal 27 PMpSat, 27 Apr 2013 19:22:53 +040022Saturday 2013, 19:22:53
0

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

- (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:@":"];
ответил Garett 1 +04002013-10-01T22:15:30+04:00312013bEurope/MoscowTue, 01 Oct 2013 22:15:30 +0400 2013, 22:15:30
0

Вот небольшая комбинация ответов @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);
ответил Jeffrey Neo 7 J000000Monday14 2014, 22:41:41
0

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

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

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

ответил Abhishek Mishra 1 J0000006Europe/Moscow 2016, 07:37:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132