aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSString+Replace.m
blob: 1306a68cdb524579926c04d9525222b68f7b0907 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//
//  GTMNSString+Replace.m
//
//  Copyright 2006-2008 Google Inc.
//
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
//  use this file except in compliance with the License.  You may obtain a copy
//  of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
//  License for the specific language governing permissions and limitations under
//  the License.
//

#import "GTMNSString+Replace.h"


@implementation NSString (GTMStringReplaceAdditions)

#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
// 10.5 has stringByReplacingOccurrencesOfString:withString:, use that directly.

- (NSString *)gtm_stringByReplacingString:(NSString *)target
                               withString:(NSString *)replacement {
  // If |target| was nil, then do nothing and return |self|
  //
  // We do the retain+autorelease dance here because of this use case:
  //   NSString *s1 = [[NSString alloc] init...];
  //   NSString *s2 = [s1 stringByReplacingString:@"foo" withString:@"bar"];
  //   [s1 release];  // |s2| still needs to be valid after this line
  if (!target)
    return [[self retain] autorelease];

  // If |replacement| is nil we want it to be treated as if @"" was specified
  // ... effectively removing |target| from self
  if (!replacement)
    replacement = @"";

  NSMutableString *result = [[self mutableCopy] autorelease];
  [result replaceOccurrencesOfString:target
                          withString:replacement
                             options:0
                               range:NSMakeRange(0, [result length])];
  return result;
}

#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5

@end