繁体   English   中英

在NSString中找到单词并检查此单词的字符前后?

[英]Finding word in NSString and checking before and after character this word?

如何在NSString查找单词并检查该单词前后的字符?

"This pattern has two parts separated by the"

如何找到tern以及如何检查前后的字符

在单词字符之前: "t"在单词字符之前: " "

您可以使用NSScanner获取这两个字符的索引。

例:

NSString *string = @"tern";
NSScanner *scanner = [[NSScanner alloc] initWithString:@"This pattern has two parts separated by the"];

[scanner scanUpToString:string intoString:nil];

NSUInteger indexOfChar1 = scanner.scanLocation - 1;
NSUInteger indexOfChar2 = scanner.scanLocation + string.length;

您还可以使用rangeOfString方法:

例:

NSRange range = [sourceString rangeOfString:stringToLookFor];
NSUInteger indexOfChar1 = range.location - 1;
NSUInteger indexOfChar2 = range.location +range.length + 1;

然后,当您有索引时,获取字符很容易

NSString *firstCharacter = [sourceString substringWithRange:NSMakeRange(indexOfChar1, 1)];
NSString *secondCharacter = [sourceString substringWithRange:NSMakeRange(indexOfChar2, 1)];

希望这可以帮助。

这是使用正则表达式的实现

NSString *testString= @"This pattern has two parts separated by the";
NSString *regexString = @"(.)(tern)(.)";

NSRegularExpression* exp = [NSRegularExpression 
  regularExpressionWithPattern:regexString 
  options:NSRegularExpressionSearch error:&error];

if (error) {
    NSLog(@"%@", error);
} else {
    NSTextCheckingResult* result = [exp firstMatchInString:testString options:0 range:NSMakeRange(0, [testString length] ) ];

if (result) {

NSRange groupOne = [result rangeAtIndex:1]; // 0 is the WHOLE string.
NSRange groupTwo = [result rangeAtIndex:2];
NSRange groupThree = [result rangeAtIndex:3];

NSLog(@"[%@][%@][%@]", 
     [testString substringWithRange:groupOne],
     [testString substringWithRange:groupTwo],
     [testString substringWithRange:groupThree] );
  }
}

结果:

[t][tern][ ]

最好在NSString中获取前后字符,以避免处理unicode字符。

NSString * testString = @"This pattern has two parts separated by the";
NSString * preString;
NSString * postString;
NSUInteger maxRange;

NSRange range = [testString rangeOfString:@"tern"];


if(range.location == NSNotFound){
    NSLog(@"Not found");
    return;
}

if (range.location==0) {
    preString=nil;
}
else{
    preString = [testString substringWithRange:NSMakeRange(range.location-1,1)];
}

maxRange = NSMaxRange(range);

if ( maxRange >=testString.length ) {
    postString = nil;
}
else{
    postString = [testString substringWithRange:NSMakeRange(range.location+range.length, 1)];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM