本地化的字符串比较

时间:2013-03-15 15:27:08

标签: ios objective-c cocoa-touch cocoa nsstring

NSString的{​​{1}}和localizedCaseInsensitiveCompare:方法之间有什么区别?

我阅读了参考文献,但没有弄清楚要使用哪一个。

3 个答案:

答案 0 :(得分:10)

localizedCaseInsensitiveCompare:相当于:

[aString compare:otherString
         options:NSCaseInsensitiveSearch
         range:NSMakeRange(0,aString.length)
        locale:[NSLocale currentLocale]];

localizedStandardCompare:基本上相当于:

[aString compare:otherString
         options:NSCaseInsensitiveSearch | NSNumericSearch
         range:NSMakeRange(0,aString.length)
        locale:[NSLocale currentLocale]];

因此,主要区别在于如何比较字符串中的数字。

使用localizedCaseInsensitiveCompare:比较以下3个字符串将产生以下顺序:

"Foo2.txt",
"Foo25.txt",
"Foo7.txt"

另一方面,使用localizedStandardCompare:比较它们会产生以下顺序:

"Foo2.txt",
"Foo7.txt",
"Foo25.txt"

虽然localizedCaseInsensitiveCompare:方法已经存在,但最近才添加localizedStandardCompare:(OS X 10.6)。 Finder使用数值方法对文件名进行排序,在添加localizedStandardCompare:之前,开发人员没有简单的方法来确保他们可以像Finder那样对字符串进行排序。

在确定使用哪一个时,如果您要比较的字符串代表文件名,那么您肯定倾向于使用localizedStandardCompare:

答案 1 :(得分:0)

后者在OS X上像Finder一样排序。

答案 2 :(得分:0)

localizedCaseInsensitiveCompare:localizedCompare:

类似

它们都返回一个NSComparisonResult值,表示接收器的词法排序,另一个给定的字符串使用本地化比较。

不同之处在于前者是case insensitive。即,在比较字符串时,它忽略了对大写和小写字母的不同使用。

localizedStandardCompare 这会比较由Finder应用程序排序的字符串。