21

I am trying to figure out how to get a range of a substring within a string. By range I mean where the substring begins and where it ends. So if I have following string example:

NSString *testString=@"hello everyone how are you doing today?Thank you!";

If the substring I am looking for (in this example) is "how are you doing", then the beginning range should be 15 and the ending range should 31.

  (15, 31)

Can anyone tell me how I could do this programatically? Thank you!

3 Answers 3

52

You can use the method -rangeOfString to find the location of a substring in a string. You can then compare the location of the range to NSNotFound to see if the string actually does contain the substring.

NSRange range = [testString rangeOfString:@"how are you doing"];

if (range.location == NSNotFound) {
    NSLog(@"The string (testString) does not contain 'how are you doing' as a substring");
}
else {
    NSLog(@"Found the range of the substring at (%d, %d)", range.location, range.location + range.length);        
}
Sign up to request clarification or add additional context in comments.

1 Comment

I'd suggest that you always check that range.location is different from NSNotFound.
12

It is pretty straight forward. You say you want to search the string "hello everyone how are you doing today?Thank you!" for "how are you doing".

You say you need the position of the first character and the last.

NSString *testString=@"hello everyone how are you doing today?Thank you!";

NSRange range = [testString rangeOfString:@"how are you doing"];

NSUInteger firstCharacterPosition = range.location;
NSUInteger lastCharacterPosition = range.location + range.length;

So now you have it those two last variables.

Comments

2

Use the built in method part of NSString:

[testString rangeOfString:@"hello how are you doing"]

Documentation: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-rangeOfString_

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.