How to get substring of NSString?

后端 未结 5 965
孤城傲影
孤城傲影 2020-12-01 02:44

If I want to get a value from the NSString @\"value:hello World:value\", what should I use?

The return value I want is @\"hello World\".

相关标签:
5条回答
  • 2020-12-01 02:55

    Here's a slightly less complicated answer:

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

    See also substringWithRange and substringFromIndex

    0 讨论(0)
  • 2020-12-01 02:58

    Use this also

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

    Note - Your NSMakeRange(start, end) should be NSMakeRange(start, end- start);

    0 讨论(0)
  • 2020-12-01 03:12

    Here's a simple function that lets you do what you are looking for:

    - (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];
    }
    

    Usage:

    NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
    
    0 讨论(0)
  • 2020-12-01 03:12

    Here is a little combination of @Regexident Option 1 and @Garett answers, to get a powerful string cutter between a prefix and suffix, with MORE...ANDMORE words on it.

    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);
    
    0 讨论(0)
  • 2020-12-01 03:17

    Option 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"
    

    Option 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];
    

    This one might be a bit over the top for your rather trivial case though.

    Option 3:

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

    This one creates three temporary strings and an array while splitting.


    All snippets assume that what's searched for is actually contained in the string.

    0 讨论(0)
提交回复
热议问题