1

我正在尝试使用此代码过滤单词

-(BOOL)isBadWord:(NSString*)string{

    NSString* path = [[NSBundle mainBundle] pathForResource:@"wordlist"
                                                 ofType:@"txt"];

    NSString* content = [NSString stringWithContentsOfFile:path
                                              encoding:NSUTF8StringEncoding
                                                 error:NULL];

    NSString *delimiter = @"\n";
    NSArray *items = [content componentsSeparatedByString:delimiter];
    NSString *character = @" ";
    NSArray *searchItems = [string componentsSeparatedByString:character];

    BOOL isContain = false;

    for (int i = 0; i < searchItems.count; i++) {

        if (![[searchItems objectAtIndex:i] isEqual:@""]) {

            NSUInteger indexOfTheObject =[items containsObject:[searchItems objectAtIndex:i]];

            if (indexOfTheObject > 0) {
                isContain = true;
            }
        }
     }
    return isContain;
}

这对于单个单词是可以的,但如果文本文件中的单词组合它不起作用。例如:字符串 = word1 {空格} word2

4

1 回答 1

3

您基本上需要做的是迭代一组坏词/组合,对于这些步骤中的每一个,您应该string像这样搜索这个组合:

BOOL isContain = NO;
for (NSString *badWord in items) {
    if ([string rangeOfString:badWord].location != NSNotFound) {
        isContain = YES;
        break;
    }
}
return isContain; 

请注意,BOOL可以是YESand NO,但不能是trueand false— 它是一种特殊的标量类型,您在使用 Cocoa/CocoaTouch 时应该在 Objectve-C 中使用。

干杯! :)

PS 似乎你对字符串做了很多工作,看看Apple 的这个字符串编程指南的章节可能对你有用。

于 2013-08-06T09:05:22.250 回答