0

我正在寻找一种可以在字符串中找到特定单词的 Objective-C 方法。我正在使用:

- (NSRange)rangeOfString:(NSString *)aString

但它并没有完全符合我的要求。原因是我更多地寻找令牌匹配而不是查找单词本身。我正在使用属性字符串,我需要字符串的特定部分才能具有属性。需要属性的部分必须等于对象的内容。我遇到的问题是,如果我有一个内容为“star”的对象,但字符串中也包含“stars”这个词,那么 range 方法将只返回“star”的范围并留下 s ,而不是确定字符串中是否存在确切的单词“star”。

我不确定这种方法是否存在,但我将不胜感激任何帮助!如果您需要任何其他说明,请告诉我!

编辑:为了帮助一点,我会给你我的确切情况:

我有一个匹配 3 张牌的纸牌游戏。对于这个例子,假设卡片上有一个■。没有两张卡是一样的。按“■■”、“■■■”和“■■”之类的顺序选择卡片会导致问题。就像我说的内容需要归因。问题是,由于有 2 张卡上有“■■”,一张卡有“■■■”,所以属性放在第一个“■■”上很好,但随后“■■■”卡被放置'■■' 卡片属性在它的前 2 个方格上,最后的 '■■' 卡片永远不会在上面放置任何东西。所以问题是它找到了'■■'的第一个子字符串,即使它是一个更大的单词的一部分。我需要它只查看字符串中与内容完全匹配的单词/标记。

4

2 回答 2

1

对于正则表达式来说,这似乎是一项可行的任务(非常罕见的鸟!):

NSRange token = [string rangeOfString:@"\\bstar\\b" options:NSRegularExpressionSearch];
于 2013-07-16T20:51:01.727 回答
0

您可以使用 将属性字符串转换为常规字符串,[attributedString string]然后像往常一样使用NSStringEnumerationByWords。例如,给定 ...stars...star... 它应该返回 star 而不是 stars。

[[s string] enumerateSubstringsInRange:NSMakeRange(0, [s length])
                      options:NSStringEnumerationByWords
                   usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    if ([substring isEqualToString:@"star"]){
       NSLog(@"%@", substring);
       *stop = YES;
    }
}];

(不确定我是否正确理解了您的卡片示例)

于 2013-07-16T22:49:27.320 回答