在ObjC中获取两个其他字符串之间的字符串

And*_*w M 15 iphone objective-c

我试图解析一个字符串,并在中间获得另一个字符串.

即.

Hello world这是一个字符串

我需要在"world"和"is"(this)之间找到字符串.我环顾四周但还未能弄清楚,主要是因为我是Objective C的新手...任何人都知道如何使用RegEx或不使用RegEx?

Pey*_*loW 33

Jacques提供的正则表达式解决方案,以及需要iOS 4.0及更高版本的警告是正确的.使用正则表达式也很慢,如果搜索表达式是已知的字符串常量,那就太过分了.

您可以使用方法NSString或类名来解决问题,这些方法NSScanner自iPhone OS 2.0以来就已经可用,并且在此之前很久,因为在Mac OS X 10.0之前实际上是:).

那么你想要的是一个NSString像这样的新方法?

@interface NSString (CWAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end;
@end
Run Code Online (Sandbox Code Playgroud)

没问题,我们假设我们应该返回nil是没有找到这样的字符串.

使用的实现NSString非常简单:

@implementation NSString (NSAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end {
    NSRange startRange = [self rangeOfString:start];
    if (startRange.location != NSNotFound) {
        NSRange targetRange;
        targetRange.location = startRange.location + startRange.length;
        targetRange.length = [self length] - targetRange.location;   
        NSRange endRange = [self rangeOfString:end options:0 range:targetRange];
        if (endRange.location != NSNotFound) {
           targetRange.length = endRange.location - targetRange.location;
           return [self substringWithRange:targetRange];
        }
    }
    return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)

或者你可以使用NSScanner类来实现:

@implementation NSString (NSAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end {
    NSScanner* scanner = [NSScanner scannerWithString:self];
    [scanner setCharactersToBeSkipped:nil];
    [scanner scanUpToString:start intoString:NULL];
    if ([scanner scanString:start intoString:NULL]) {
        NSString* result = nil;
        if ([scanner scanUpToString:end intoString:&result]) {
            return result;
        }
    }
    return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)


小智 12

只是对PeyloW的答案的一个简单修改,它返回开始和结束字符串中的所有字符串:

-(NSMutableArray*)stringsBetweenString:(NSString*)start andString:(NSString*)end
{

  NSMutableArray* strings = [NSMutableArray arrayWithCapacity:0];

  NSRange startRange = [self rangeOfString:start];

  for( ;; )
  {

    if (startRange.location != NSNotFound)
    {

      NSRange targetRange;

      targetRange.location = startRange.location + startRange.length;
      targetRange.length = [self length] - targetRange.location;   

      NSRange endRange = [self rangeOfString:end options:0 range:targetRange];

      if (endRange.location != NSNotFound)
      {

        targetRange.length = endRange.location - targetRange.location;
        [strings addObject:[self substringWithRange:targetRange]];

        NSRange restOfString;

        restOfString.location = endRange.location + endRange.length;
        restOfString.length = [self length] - restOfString.location;

        startRange = [self rangeOfString:start options:0 range:restOfString];

      }
      else
      {
        break;
      }

    }
    else
    {
      break;
    }

  }

  return strings;

}
Run Code Online (Sandbox Code Playgroud)

  • 对于其他人..再添加一个参数作为'originalString'并用它替换'self'. (2认同)