代码之家  ›  专栏  ›  技术社区  ›  Corey Floyd

比较NSstring对物品的会计处理(即“the”和“a”)。

  •  1
  • Corey Floyd  · 技术社区  · 16 年前

    我以为不敏感的公司会处理这个问题(在比较中不包括“the”和“a”),但事实并非如此。

    (另外,对于下面的第一个回答,我理解“不区分大小写”部分没有帮助,但我认为“本地化”部分可能有帮助。

    我找不到任何选择来做这件事,谷歌是不可用的,因为我正在搜索“的”和“A”。

    我想,因为这很常见,可可中会存在一些东西。

    我正在实现我自己的方法,但我认为有一种内置的方法可以做到这一点。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Peter Hosey    16 年前

    当您想知道cocoa是否支持某些东西时,在这种情况下查看文档通常会有所帮助, the list of all of the options NSString supports for comparisons .

    在实现这一点时,不要忘记将文章列表放入应用程序包内的本地化资源文件中,这样本地化人员就可以用自己的语言提供可剥离文章列表。按需加载该文件,并在整个过程的生命周期中保留它。或者,对于某些事情(例如,乐队名称),最好有一个包含所有已知文章的文件。

        2
  •  0
  •   Corey Floyd    16 年前

    为了完整性起见,下面是我用来解决对对象排序问题的代码。将其添加到nsstring的类别中。

    - (NSComparisonResult)localizedCaseInsensitiveExcludeTheCompare:(NSString*)aString{
    
        NSString* firstString = [self stringByRemovingArticlePrefixes];
        aString = [aString stringByRemovingThePrefixes];
    
        return [firstString localizedCaseInsensitiveCompare:aString];    
    
    }
    
    - (NSString*)stringByRemovingThePrefixes{
    
        if([self length] < 5)
            return self; 
    
        NSString* aString = [self copy];
    
        if([[aString substringToIndex:4] doesContainString:@"The "]){
    
            aString = [aString substringFromIndex:4];
            aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    
        }else if([[aString substringToIndex:4] doesContainString:@"the "]){
    
            aString = [aString substringFromIndex:4];
            aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        }
    
        return [aString autorelease];
    }