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)
| 归档时间: |
|
| 查看次数: |
15402 次 |
| 最近记录: |