如果一个字符串在字典序上比另一个字符串大,如何在Objective-C中判断?

23

我正在尝试使用 if 语句来确定两个字符串中哪一个按字母顺序排列在前。就像数字的大小比较一样:

if (1 < 2) {

仅使用字符串:

if(@"ahello" < @"bhello") {

或者我是否需要拥有一个包含所有字母的字符串,然后检查每个字符串中第一个字符的索引,并查看哪个索引更大,较小的索引在字母表中排在前面,如果它们相等,则移动到下一个字符并重复?


就像在 C 语言中一样,你的 if 语句是比较字符串指针而不是字符串内容。 - AndersK
那只是我所说的一个例子。 - Jonathan.
2个回答

39
你可以做的是:
NSString *stringOne = @"abcdef";
NSString *stringTwo = @"defabc";

NSComparisonResult result = [stringOne compare:stringTwo];

if (result == NSOrderedAscending) // stringOne < stringTwo
    ...

if (result == NSOrderedDescending) // stringOne > stringTwo
    ...

if (result == NSOrderedSame) // stringOne == stringTwo
    ...

还有其他方法可以进行不同类型的比较(例如大小写不敏感、变音符号不敏感等),但比较结果仍可像上述一样处理。或者,有些人发现将result与0进行比较更容易。用于将result与0进行比较的运算符将与其他语言中直接进行字符串比较时使用的运算符相同:

if (result < 0) // stringOne < stringTwo
    ...

if (result > 0) // stringOne > stringTwo
    ...

if (result == 0) // stringOne == stringTwo
    ...

大多数(如果不是全部)NSString的compare:...方法都是compare:options:range:locale:的包装器。您可以传递的不同选项类型可以在这里找到。


4

NSString有许多compare:方法,可以完全满足您的需求。其中一些非常简单,而其他一些则具有许多选项,您可以使用这些选项来自定义行为。查看文档了解更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接