我正在构建一个 Twitter iPhone 应用程序,它需要检测您何时在 UITextView 的字符串中输入主题标签或 @-mention。
如何在 NSString 中找到所有以“@”或“#”字符开头的单词?
谢谢你的帮助!
我正在构建一个 Twitter iPhone 应用程序,它需要检测您何时在 UITextView 的字符串中输入主题标签或 @-mention。
如何在 NSString 中找到所有以“@”或“#”字符开头的单词?
谢谢你的帮助!
您可以将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);
}
您可以使用 componentsSeparatedByString: 将字符串分解为多个片段(单词),然后检查每个片段的第一个字符。
或者,如果您需要在用户键入时执行此操作,您可以为文本视图提供一个委托并实现 textView:shouldChangeTextInRange:replacementText: 以查看键入的字符。
为此制作了一个 NSString 类别。这很简单:查找所有单词,返回所有以 # 开头的单词以获取主题标签。
下面的相关代码段 - 也重命名这些方法和类别......
@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;
}
if([[test substringToIndex:1] isEqualToString:@"@"] ||
[[test substringToIndex:1] isEqualToString:@"#"])
{
bla blah blah
}
这是您可以使用的方法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 是 NSArray。
使用以下表达式检测字符串中的 @ 或 #
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#(\\w+)|@(\\w+)) " options:NSRegularExpressionCaseInsensitive error:&error];