0

我不知道该怎么做,我尝试过使用如下代码:

NSString *stringToFind = @"Hi";
NSString *fullString = @"Hi Objective C!";
NSRange range = [fullString rangeOfString :stringToFind];
if (range.location != NSNotFound)
{
    NSLog(@"I found something.");
}

但这不符合我的需要,我想搜索一个字符串,如#customstring(# 表示标签),其中标签由用户指定,因此他们输入类似这样Something #hello #world的内容,我想要做的是搜索所有#和附加到它的字符串并将其保存在某处。

编辑:创建的标签字符串,我将它保存在一个 plist 中,但是当我保存它时,它只保存一个标签,因为我只是将字符串指定为标签。所以像这样:

[db addNewItem:label tagString:tag];

我需要创建的所有标签。例如在我的日志中:

我登录tag,这出现了#tag,我tag用两个这样的标签再次登录Something #hello #world我得到两个这样的标签:#hello&#world每个单独的日志。

我想要的结果是这样的:

#hello, #world然后将其存储在一个字符串中并将其保存到我的DB.

4

2 回答 2

6

您应该使用正则表达式:

NSString *input = @"Something #hello #world";

NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"#\\w+" options:0 error:nil];
NSArray *matches = [regex matchesInString:input options:0 range:NSMakeRange(0, input.length)];

NSLog(@"%d matches found.", matches.count);
for (NSTextCheckingResult *match in matches) {
    NSString *tag = [input substringWithRange:[match range]];
    NSLog(@"%@", tag);
}
// #hello
// #world

编辑要获取没有哈希字符的标签#,您应该在正则表达式中使用捕获组,如下所示:

NSString *input = @"Something #hello #world";

NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"#(\\w+)" options:0 error:nil];
NSArray *matches = [regex matchesInString:input options:0 range:NSMakeRange(0, input.length)];

NSLog(@"%d matches found.", matches.count);
for (NSTextCheckingResult *match in matches) {
    NSString *tag = [input substringWithRange:[match rangeAtIndex:1]];
    NSLog(@"%@", tag);
}
// hello
// world

编辑要获取包含除标签之外的输入字符串的字符串,可以使用以下方法:

NSString *stringWithoutTags = [regex stringByReplacingMatchesInString:input options:0 range:NSMakeRange(0, input.length) withTemplate:@""];
NSLog(@"%@", stringWithoutTags);
// Something

编辑现在您有了不同的标签,您可以创建一个包含它们的字符串,如下所示:

NSMutableArray *tagsArray = [NSMutableArray array];
for (NSTextCheckingResult *match in matches) {
    NSString *tag = [input substringWithRange:[match range]];
    [tagsArray addObject:tag];
}
NSString *tagsString = [tagsArray componentsJoinedByString:@", "];
NSLog(@"tagsString: %@", tagsString);
于 2012-04-22T18:10:29.140 回答
-1

我会将它拆分为一个由 # 分隔的数组,然后为每个数组再次按空格分隔并为每个数组选择第一个单词:

  NSArray *chunks = [string componentsSeparatedByString: @"#"];
于 2012-04-22T18:07:33.583 回答