Вопрос по objective-c, ios – Как вы обнаруживаете слова, начинающиеся с «@» или «#» в строке NSString?

8

Я создаю приложение Twitter для iPhone, и оно должно определять, когда вы вводите хэштег или @ -mention в строке в UITextView.

Как найти все слова, начинающиеся с символа & quot; @? или & quot; # & quot; символы в строке NSString?

Спасибо за вашу помощь!

вам нужно получить эти символы во время редактирования или после редактирования (возможно, путем вызова действия)? в соответствии с этим пунктом я могу помочь вам ilhnctn

Ваш Ответ

6   ответов
0
if([[test substringToIndex:1] isEqualToString:@"@"] ||
   [[test substringToIndex:1] isEqualToString:@"#"])
{
    bla blah blah
}
Error: User Rate Limit Exceeded
22

NSRegularExpression класс с шаблоном как # \ w + (\ w обозначает символы слова).

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];
NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
for (NSTextCheckingResult *match in matches) {
    NSRange wordRange = [match rangeAtIndex:1];
    NSString* word = [string substringWithRange:wordRange];
    NSLog(@"Found tag %@", word);
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded\\w+Error: User Rate Limit Exceeded\w+.
Error: User Rate Limit Exceeded
0

NSPredicate

Вы можете попробовать что-то вроде этого в делегате UITextView:

- (void)textViewDidChange:(UITextView *)textView
{
    _words = [self.textView.text componentsSeparatedByString:@" "];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] '@'"];
    NSArray* names = [_words filteredArrayUsingPredicate:predicate];
    if (_oldArray)
    {
        NSMutableSet* set1 = [NSMutableSet setWithArray:names];
        NSMutableSet* set2 = [NSMutableSet setWithArray:_oldArray];
        [set1 minusSet:set2];
        if (set1.count > 0)
            NSLog(@"Results %@", set1);
    }
    _oldArray = [[NSArray alloc] initWithArray:names];
}

где _words, _searchResults и _oldArray являются NSArrays.

2

используя componentSeparatedByString: и затем проверить первый символ каждого из них.

Или, если вам нужно сделать это, пока пользователь печатает, вы можете предоставить делегат для текстового представления и реализовать textView: shouldChangeTextInRange: replaceText: для просмотра напечатанных символов.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

найти все слова, вернуть все слова, начинающиеся с #, чтобы получить хэштеги.

Соответствующий сегмент кода ниже - переименуйте эти методы & amp; категория тоже ...

@implementation NSString (PA)
// all words in a string
-(NSArray *)pa_words {
    return [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

// only the hashtags
-(NSArray *)pa_hashTags {
    NSArray *words = [self pa_words];
    NSMutableArray *result = [NSMutableArray array];
    for(NSString *word in words) {
        if ([word hasPrefix:@"#"])
            [result addObject:word];
    }
    return result;
}
0

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#(\\w+)|@(\\w+)) " options:NSRegularExpressionCaseInsensitive error:&error];

Похожие вопросы