Sunday, May 19, 2013

NSString rangeOfCharacterFromSet options range example ios

[NSString rangeOfCharacterFromSet options range]

Finds and returns the range in the receiver of the first character from a given character set found in a given range with given options.
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet options:(NSStringCompareOptions)mask range:(NSRange)aRange
Parameters of [NSString rangeOfCharacterFromSet options range]
A character set. This value must not be nil.

Important: Raises an NSInvalidArgumentException if aSet is nil.
A mask specifying search options. The following options may be specified by combining them with the C bitwise OR operator: NSCaseInsensitiveSearch,NSLiteralSearchNSBackwardsSearch. See String Programming Guide for details on these options.
The range in which to search. aRange must not exceed the bounds of the receiver.

Important: Raises an NSRangeException if any part of aRange lies beyond the end of the string.
Return Value of [NSString rangeOfCharacterFromSet options range]
The range in the receiver of the first character found from aSet within aRange. Returns a range of {NSNotFound, 0} if none of the characters in aSet are found.
Discussion of [NSString rangeOfCharacterFromSet options range]
Because pre-composed characters in aSet can match composed character sequences in the receiver, the length of the returned range can be greater than 1. For example, if you search for “ΓΌ” in the string “stru¨del”, the returned range is{3,2}.
This method detects all invalid ranges (including those with negative lengths). For applications linked against OS X v10.6 and later, this error causes an exception; for applications linked against earlier releases, this error causes a warning, which is displayed just once per application execution.
[NSString rangeOfCharacterFromSet options range] example
- (NSArray *)rangesOfUppercaseLettersInString:(NSString *)str {
    NSCharacterSet *cs = [NSCharacterSet uppercaseLetterCharacterSet];
    NSMutableArray *results = [NSMutableArray array];
    NSRange searchRange = NSMakeRange(0, [str length]);
    NSRange range;
    while ((range = [str rangeOfCharacterFromSet:cs options:0 range:searchRange]).location != NSNotFound) {
        [results addObject:[NSValue valueWithRange:range]];
        searchRange = NSMakeRange(NSMaxRange(range), [str length] - NSMaxRange(range));
    return results;
[NSString rangeOfCharacterFromSet options range] example
NSString * normalize(NSString * number)
    NSString *normalizedNumber = @"";
    NSString *tmpString = nil;

    NSRange searchRange;
    NSRange resultRange;
    searchRange.location = 0;
    searchRange.length = number.length;

    while (0 < searchRange.length)
        resultRange = [number rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]
        tmpString = [number substringWithRange:resultRange];
        normalizedNumber = [normalizedNumber stringByAppendingString:tmpString];
        searchRange.location = resultRange.location + resultRange.length;
        searchRange.length = number.length - searchRange.location;

    return normalizedNumber;
[NSString rangeOfCharacterFromSet options range] example
// cut a string by words
- (NSString *)stringCutByWordsToMaxLength:(int)length
     NSCharacterSet *whitespaceCharacterSet =
                      [NSCharacterSet whitespaceCharacterSet];

     // to consider: a range check on length here?
     NSRange relevantRange = NSMakeRange(0, length);

     // find beginning of last word
     NSRange lastWordRange =
           [self rangeOfCharacterFromSet:whitespaceCharacterSet

     // if the last word was the first word of the string,
     // consume the whole string; this looks to be the same
     // effect as the original scan forward given that the
     // assumption is already made in the scan backwards that
     // the string doesn't end on a whitespace; if I'm wrong
     // then get [whitespaceCharacterSet invertedSet] and do
     // a search forwards
     if(lastWordRange.location == NSNotFound)
          lastWordRange = relevantRange;

    // adjust the range to include dependent chars
    stringRange = [self rangeOfComposedCharacterSequencesForRange:stringRange];

    // Now you can create the short string
    NSString *string = [self substringWithRange:stringRange];

    return [NSString stringWithFormat:@"%@...",string];