2014-02-17 4 views
0

Как найти слово в NSString и проверить символы до и после этого слова?Поиск слова в NSString и проверка до и после символа этого слова?

"This pattern has two parts separated by the"

Как найти tern и как проверить характер до и после

До символа слова: "t" После символа слова: " "

+4

Этот вопрос очень неясен. Просьба уточнить, что вы пытаетесь сделать. – rmaddy

+0

Ошибка синтаксиса ... –

+0

Как получить символ, используя NSUInteger indexOfChar1 = scanner.scanLocation - 1; NSUInteger indexOfChar2 = scanner.scanLocation + string.length; –

ответ

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][ ] 
+0

Если регулярное выражение было изменено на (.?) (Tern) (.?), Это позволило бы сопоставить случай «края»: термин, встречающийся в начале или конце строки – Jeef

+0

Следует отметить, что его профессор никогда не поверит ему выяснили, как использовать REs и, следовательно, будут знать, что он скопировал ответ с веб-сайта. –

3

Вы можете использовать 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)]; 

Надеюсь, это поможет.

0

Его лучше, чтобы получить до и после символа в NSString, чтобы избежать обработки Юникода символов.

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)]; 
} 
Смежные вопросы