我正在寻找一种可以在字符串中找到特定单词的Objective-C方法。我正在使用:
- (NSRange)rangeOfString:(NSString *)aString
但它并没有完全符合我的要求。原因是我更多地寻找令牌匹配而不是找到这个词本身。我正在使用属性字符串,我需要字符串的特定部分来拥有属性。需要属性的部分必须等于对象的内容。我遇到的问题是,如果我有一个内容为'star'的对象,但'stars'一词也在字符串中,则range方法将返回'star'的范围并离开s而不是确定字符串中是否存在确切的单词“star”。
我不确定这种方法是否存在,但我非常感谢任何帮助!如果您需要任何其他说明,请告诉我们!
编辑: 为了帮助我一点点,我会告诉你我的具体情况:
我有一张与3张牌匹配的纸牌游戏。对于这个例子,假设卡上有一个■。没有两张牌是一样的。按“■■”,“■■■”和“■■”等顺序选择卡片会导致问题。就像我说的那样,内容需要归结。问题是,因为有2张卡上有“■■”,另一张带有“■■■”,所以属性放在第一个'■■'罚款,但随后'■■'卡被放置在它的前2个方格上带有'■''牌属性,最后的'■''牌永远不会放在它上面。所以问题在于它找到了'■■'的第一个子串,即使它是一个更大的单词。我需要它只查看字符串中与内容完全匹配的单词/标记。
答案 0 :(得分:1)
似乎是正则表达式的可行任务(非常罕见的鸟!):
NSRange token = [string rangeOfString:@"\\bstar\\b" options:NSRegularExpressionSearch];
答案 1 :(得分:0)
您可以使用[attributedString string]
将属性字符串转换为常规字符串,然后照常使用NSStringEnumerationByWords
。例如,给定......星星......明星......它应该返回星星而不是星星。
[[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;
}
}];
(不确定我是否正确理解了您的卡片示例)