Objective-C 【NSString-字符串比较&前后缀检查及搜索】
———————————————————————————————————————————
NSString 字符串比较
#import <Foundation/Foundation.h>
void test1()
{
// 比较字符串大小
// 首先我们定义两个字符串
NSString *str1=@"abc";
NSString *str2=@"Acd";
// 我们要用到的是compare这个比较字符串的方法(这是一个对象方法,由字符串实例对象调用,比较字符串时精确到每个字符。注:比较的是ASCII值)
NSComparisonResult result1=[str1 compare:str2];
// 我们目前对这个方法不是太理解,我们不知道这个方法返回值是什么类型,调用了也没法判断两个字符串谁大谁小。那么我们就点进去看看底层是什么东西
// - (NSComparisonResult)compare:(NSString *)string; 在底层中我们看到了这个,显然,返回值是NSComparisonResult类型的
// 然后我们再点进去这个类型,我们发现:
// typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
// 其实NSComparisonResult这个类型是一个枚举类型,且返回值有三种:NSOrderedAscending(升序)、NSOrderedSame(相等)、NSOrderedDescending(降序)
// 我来解读一下这三种返回类型:
// ①NSOrderedAscending:升序,也就是前面的小,后面的大
// ②NSOrderedSame:相等,也就是两个字符串相等
// ③NSOrderedDescending:降序,也就是前面的大,后面的小
// 了解清楚compare这个方法后,我们就可以接着判断了:
switch (result1) {
case NSOrderedAscending:
NSLog(@"str1<str2");
break;
case NSOrderedDescending:
NSLog(@"str1>str2");
break;
case NSOrderedSame:
NSLog(@"str1==str2");
break;
default:
break;
}
}
void test2()
{
// 比较字符串大小的时候加上限定条件(比如说不区分大小写啦)
NSString *str3=@"abc";
NSString *str4=@"ABC";
NSComparisonResult result2=[str3 compare:str4 options:NSCaseInsensitiveSearch];
switch (result2) {
case NSOrderedAscending:
NSLog(@"str1<str2");
break;
case NSOrderedDescending:
NSLog(@"str1>str2");
break;
case NSOrderedSame:
NSLog(@"str1==str2");
break;
default:
break;
}
// NSCaseInsensitiveSearch 不区分大小写比较
// NSLiteralSearch 进行完全比较(默认属性)
// 还有很多比较时可加的属性,自行可添加
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 比较两个字符串是否相等
// 我们比较两个字符串是否相等时,不可以用if(str1==str2) ,这样是完全错误的,我们要用另外一个方法 isEqualToString
NSString *str5=@"abc";
NSString *str6=@"abc";
// isEqualToString的返回值是BOOL类型,返回1就相等,返回0就不相等
if ([str5 isEqualToString:str6]) {
NSLog(@"相等");
}
else
{
NSLog(@"不相等");
}
}
return 0;
}
———————————————————————————————————————————
NSString 的前后缀检查及搜索
#import <Foundation/Foundation.h>
void test1()
{
// 检查字符串前后缀是否正确
// 检查前缀是否满足条件 hasPrefix
NSString *str1=@"https://saaddaddfgga";
if ([str1 hasPrefix:@"http://"]||[str1 hasPrefix:@"https://"]) {
NSLog(@"符合前缀");
}
else
{
NSLog(@"不符合");
}
// 检查后缀是否满足条件 hasSuffix
NSString *str2=@"asfa.jp1g";
// 我们可以对多个后缀进行判断,看给定字符串是否符合(当然前缀也可以同时判定多个)
if ([str2 hasSuffix:@".jpg"]||[str2 hasSuffix:@".avi"]||[str2 hasSuffix:@".gif"]) {
NSLog(@"符合后缀");
}
else
{
NSLog(@"不符合");
}
}
void test2()
{
// 正序查找
// 查找 一小段字符串 在 字符串str2 中的位置(并输出 子字符串 在 str2 中的位置及其长度)
// 注:这里其实就是寻找一个 字符串 的 子字符串
NSString *str2=@"啦4234324啦啦王中尧啦1231122342啦啦啦";
NSRange qqqq=[str2 rangeOfString:@"王中尧"];//声明枚举类型的实例对象不用加 * ,如果加了 * ,就成这个对象的地址了,显然就不对了。
// - (NSRange)rangeOfString:(NSString *)aString;
// 我们在注释中可以知道 rangeOfString 这个方法的返回值是 NSRange
// 而 NSRange 是什么呢?
// typedef struct _NSRange {
// NSUInteger location;
// NSUInteger length;
// } NSRange;
// 显然这是一个枚举类型,返回值是 该子字符串 在 字符串str2 中的 位置 和 自身长度
// rangeOfString 作用是查找子字符串itcast在 str中第一次出现的位置
// 如果找能够查找到字符串,则返回子字符串的位置信息
// 如果查找不到,则返回的Range的
// 位置 是一个特别大得数
// length 0
NSLog(@"位置为:%ld ,长度为:%ld",qqqq.location,qqqq.length);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 我们在搜索的时候,常用到NSNotFound来判定是否查找到该字符串
// NSNotFound是一个 #define NSIntegerMax LONG_MAX (也就是无符号的长整型)
// 这相当于系统规定的一个瓶颈,一旦超过这个界限,就会报错
NSString *str=@"fafaffaitcawwwstsdfasffa";
NSRange qq=[str rangeOfString:@"itcast"];
if (qq.location!=NSNotFound) {//这里其实就是如果 子字符串 在 该字符串 中的位置不是无限大,那么肯定就对了,如果无限大,肯定就跑到外面去了,就找不到了~
NSLog(@"查找成功");
}
else
{
NSLog(@"wrong!");
}
}
return 0;
}
———————————————————————————————————————————
Objective-C 【NSString-字符串比较&前后缀检查及搜索】的更多相关文章
- poj 2752 求一个字符串所有的相同前后缀
求一个字符串所有的相同前后缀Sample Input ababcababababcababaaaaaSample Output 2 4 9 181 2 3 4 5 #include <iostr ...
- iOS - OC NSString 字符串
前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSM ...
- NSString 字符串
0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...
- NSString 字符串操作
//一.NSString /*----------------创建字符串的方法----------------*/ //1.创建常量字符串. NSString *astring = @"Th ...
- NSString字符串
要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByReplacingOccurrences ...
- poj 2752 Seek the Name, Seek the Fame【KMP算法分析记录】【求前后缀相同的子串的长度】
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14106 Ac ...
- [LeetCode] Prefix and Suffix Search 前后缀搜索
Given many words, words[i] has weight i. Design a class WordFilter that supports one function, WordF ...
- Hibernate给表和字段设置前后缀及分隔符
在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...
- HDU 2594(求最长公共前后缀 kmp)
题意是在所给的两个字符串中找最长的公共前后缀,即第一个字符串前缀和第二个字符串后缀的最长相等串. 思路是将两个字符串拼接在一起,然后直接套用 kmp 算法即可. 要注意用 next 会报编译错误,改成 ...
随机推荐
- 专注网格剖分 - TetGen
提要 记得大三那一年有一门课叫做高等有限元,最后的作业就是网格剖分算法的实现,我和同学一起花了些时间做了一个Qt程序,他写算法,我写界面,最后成绩竟然出奇的拿了90多... 今天要介绍的这款软件Tet ...
- 好记心不如烂笔头之JQuery学习,第二章
jQuery获取元素不需要担心元素不存在而报错,但是无论怎样 $("#xxx") 是一定会有返回值的,无论存不存在元素,那么依然是要对元素做判断的,判断的方法常见两种 1.看返回的 ...
- Qt界面美化 QSS
目前发现在Qt-Design中右击控件,可以选择Change StyleSheet ------------------------以下总结不太对 刚接触Qt,发现Qt Design无法对每个控件进行 ...
- ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5
摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...
- php.ini的配置
一.user_agent ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') user_agent,再 ...
- 优化Laravel网站打开速度
Laravel是一个功能强大的框架,组件很多,代码也很庞大,它的易用方便是牺牲了性能的,即便如此它仍然是一个优秀的框架,但在正式环境下要做好优化提升网站的打开速度. 1.关闭debug 打开.env文 ...
- Debian中编译内核
转载: http://blog.163.com/libo_5/blog/static/156968520101016102051580/ http://hi.baidu.com/wg_wang/ite ...
- java中set和get方法的理解
对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者 ...
- 使用docker-hub
使用docker hub 需要其账号 基本操作 查找镜像 sudo docker search centos 每个用户有自己的命名空间,如:centos是存仓库中的镜像文件,admln/centos则 ...
- 在提交SVN时有时候会报svn is already locked 错误
svn is already locked 解决方案: 如题所述经常在更新代码的时候会产生这样的问题!并且在对应的目录上操作Clean Up 没有任何的效果!如下解决方法. 在出错文件夹下,鼠标右键T ...