(每天最重要的事情是什么?(上班)还有比它更重要的事情么?(有! 加班))
字符串,这里总结一些方法案例:
一、compare:
(判断两对象值的大小,按字母顺序进行比较)
NSString *string = @"9.1.1";
[string compare:@"9.1.1"];返回的类型是NSComparisonResult 的NSOrderedSame(= 等于)
[string compare:@"9.2.1"];返回的是NSOrderedAscending (后面一个字符串大于前面一个 升序)
[string compare:@"9.0.1"];返回的是NSOrderedDescending (后面一个字符串小于前面一个 降序)
在系统内部的样式
typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L,
NSOrderedSame,
NSOrderedDescending
};
一般情况下我们可以使用这个来进行版本号的对比:
例子
NSString *num1 = @"5.2.0";
NSString *num2 = @"5.3.0";
if ([num1 compare:num2 options:NSNumericSearch] == NSOrderedDescending)
{
ULog(@"%@ is bigger",num1);
}else
{
ULog(@"%@ is bigger",num2);
}
解释:
NSOrderedDescending是降序,如果numb1>numb2用这个函数相比较那么就等于降序。
字符串的比对结果NSComparisonResult(在NSObjCRunTime.h中定义)是按照字符的ASCII值进行比对的
NSString * str1 = @"abc";
NSString * str2 = @"abd";
NSString * str3 = @"ABC";
NSString * str4 = @"abc";
NSString * str5 = @"123";
那么,
[str1 compare:str2] == NSOrderedAscending;//(升序)
[str2 compare:str1] == NSOrderedDescending;//(降序)
[str1 compare:str3] == NSOrderedDescending;//(降序)
[str1 compare:str4] == NSOrderedSame;//(同序)
[str1 compare:str5] == NSOrderedDescending;//(降序)
(compare的比对含义:左比右 左侧的数值小于(等于或者大于)右侧的值,即compare的目标值(右边的值)相比于参数值(左边的值)在字母表中的排序位置更靠后(相同或者靠前))
(出现问题:
原因:是由于字符串他的比对是逐位从左到右的比对的,9是比1大的。所以出现上面的问题。
同样:
它的比对成功也是由于@"90.0.1"的第二位0在ASCII表中的位置在.之后。是错误的比对误造成正确的@"90.0.1"大于@"9.0.1"的样子。
同样,对于字符串长度的不一致的
添加option值(改为:)
NSComparisonResult result = [string2 compare:string options:NSNumericSearch];
能够使字符串的比对添加选项option,针对数字进行比较。解决上面数据的根据字符从左至右依次比对出现的问题:
扩展:
在c语言中(摘自:https://blog.csdn.net/ctrl_qun/article/details/66970652)
#include
#include
int main(void)
{
char str_1[] = "abc";
char str_2[] = "abc";
char str_3[] = "ABC";
if (strcmp(str_1, str_2) == 0)
printf("str_1 is equal to str_2. \n");
else
printf("str_1 is not equal to str_2. \n");
if (strcmp(str_1, str_3) == 0)
printf("str_1 is equal to str_3.\n");
else
printf("str_1 is not equal to str_3.\n");
return 0;
}
上例的打印输出如下所示: strcmp()函数有两个参数,即要比较的两个字符串。strcmp()函数对两个字符串进行大小写敏感的(case-sensitiVe)和字典式的(lexicographic)比较,并返回下列值之一:
----------------------------------------------------
返 回 值 意 义
----------------------------------------------------
<0 第一个字符串小于第二个字符串
0 两个字符串相等 ·
>0 第一个字符串大于第二个字符串
----------------------------------------------------
在上例中,当比较str_1(即“abc”)和str_2(即“abc”)时,strcmp()函数的返回值为0。然而,当比较str_1(即"abc")和str_3(即"ABC")时,strcmp()函数返回一个大于0的值,因为按ASCII顺序字符串“ABC”小于“abc”。
strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方稍有差别。下表列出了C语言提供的与strcmp()函数类似的一些函数:
-----------------------------------------------------------------
函 数 名 作 用
-----------------------------------------------------------------
strcmp() 对两个字符串进行大小写敏感的比较
strcmpi() 对两个字符串进行大小写不敏感的比较
stricmp() 同strcmpi()
strncmp() 对两个字符串的一部分进行大小写敏感的比较
strnicmp() 对两个字符串的一部分进行大小写不敏感的比较
-----------------------------------------------------------------
在前面的例子中,如果用strcmpi()函数代替strcmp()函数,则程序将认为字符串“ABC”等于“abc”。
二、[ compare:(NSString *) options:(NSStringCompareOptions)];
传入 NSStringCompareOptions 枚举的值
enum{
NSCaseInsensitiveSearch = 1,//不区分大小写比较
NSLiteralSearch = 2,//区分大小写比较
NSBackwardsSearch = 4,//从字符串末尾开始搜索
NSAnchoredSearch = 8,//搜索限制范围的字符串
NSNumbericSearch = 64//按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt
//以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用
NSDiacriticInsensitiveSearch = 128,//忽略 "-" 符号的比较
NSWidthInsensitiveSearch = 256,//忽略字符串的长度,比较出结果
NSForcedOrderingSearch = 512//忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending
//以下定义高于 iphone 3.2 可用
NSRegularExpressionSearch = 1024//只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearch
}
(可以多个条件一起约束
例如:
BOOL result = [astring01 compare:astring02 options:NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame; //NSCaseInsensitiveSearch:不区分大小写比较 NSLiteralSearch:进行完全比较,区分大小写 NSNumericSearch:比较字符串的字符个数,而不是字符值。)
range:(NSRange)
比较字符串的范围
结构变量:
typedef struct _NSRange {
NSUInteger location; //需要比较的字串起始位置(以0为起始)
NSUInteger length; //需要比较的字串长度
} NSRange;
NSRange的使用:
NSRange range1 = {2,4};
NSRange range4 = NSMakeRange(2, 5);
//截取字符串
NSString *homebrew = @"cushy yigexinshuju caicaikan";
NSLog(@"%@", [homebrew substringWithRange:range1]);
NSLog(@"%@", [homebrew substringWithRange:range4]);
//查找字符串
NSRange range2 = [homebrew rangeOfString: @"cai"];
NSLog(@"range:%@", NSStringFromRange(range2));
NSRange range3 = [homebrew rangeOfString:@"xinshu"];
NSLog(@"range:%@", NSStringFromRange(range3));
//反向查找字符串的位置
NSRange range5 = [homebrew rangeOfString:@"ju"];
NSLog(@"%@", NSStringFromRange(range5));
NSRange range6 = [homebrew rangeOfString:@"ju" options: NSBackwardsSearch];
NSLog(@"%@", NSStringFromRange(range6));
四、改变字符串的大小写
NSString *string1 = @"A String";
NSString *string2 = @"String";
NSLog(@"string1:%@",[string1 uppercaseString]);//大写
NSLog(@"string2:%@",[string2 lowercaseString]);//小写
NSLog(@"string2:%@",[string2 capitalizedString]);//首字母大小