在实际项目开发过程中,发现字符串使用频率还是非常高的,NSString提供了很多相关的API,但是在开发过程中发现很多业务功能都是相同的。因此根据在开发过程中遇到的字符串使用场景,进行了简单封装。具体代码如下:

NSString+Category.h 代码:

//
// NSString+Category.h
// myApplication
//
// Created by xujinzhong on 2018/3/13.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import <Foundation/Foundation.h> @interface NSString (Category) - (BOOL)isBlank;
- (BOOL)isValid;
- (NSString *)removeWhiteSpacesFromString; - (NSUInteger)countNumberOfWords;
- (BOOL)containsString:(NSString *)subString;
- (BOOL)isBeginsWith:(NSString *)string;
- (BOOL)isEndssWith:(NSString *)string; - (NSString *)replaceCharcter:(NSString *)olderChar withCharcter:(NSString *)newerChar;
- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end;
- (NSString *)addString:(NSString *)string;
- (NSString *)removeSubString:(NSString *)subString; - (BOOL)containsOnlyLetters;
- (BOOL)containsOnlyNumbers;
- (BOOL)containsOnlyNumbersAndLetters;
- (BOOL)isInThisarray:(NSArray*)array; + (NSString *)getStringFromArray:(NSArray *)array;
- (NSArray *)getArray; + (NSString *)getMyApplicationVersion;
+ (NSString *)getMyApplicationName; - (NSData *)convertToData;
+ (NSString *)getStringFromData:(NSData *)data; - (BOOL)isValidEmail;
- (BOOL)isVAlidPhoneNumber;
- (BOOL)isValidUrl; @end

NSString+Category.m 代码:

//
// NSString+Category.m
// myApplication
//
// Created by xujinzhong on 2018/3/13.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import "NSString+Category.h" @implementation NSString (Category) //字符串是否为空
-(BOOL)isBlank
{
return ([[self removeWhiteSpacesFromString] isEqualToString:@""]) ? YES : NO;
} //字符串为空或nil
-(BOOL)isValid
{
return ([[self removeWhiteSpacesFromString] isEqualToString:@""] || self == nil || [self isEqualToString:@"(null)"]) ? NO :YES;
} //在字符串中删除空格
- (NSString *)removeWhiteSpacesFromString
{
NSString *trimmedString = [self stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return trimmedString;
} //字符串中包含单词数
- (NSUInteger)countNumberOfWords
{
NSScanner *scanner = [NSScanner scannerWithString:self];
NSCharacterSet *whiteSpace = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSUInteger count = ;
while ([scanner scanUpToCharactersFromSet: whiteSpace intoString: nil]) {
count++;
} return count;
} // 字符串中是否包含子字符串
- (BOOL)containsString:(NSString *)subString
{
return ([self rangeOfString:subString].location == NSNotFound) ? NO : YES;
} // 字符串从给定的字符串开始
- (BOOL)isBeginsWith:(NSString *)string
{
return ([self hasPrefix:string]) ? YES : NO;
} // 字符串以给定的字符串结束
- (BOOL)isEndssWith:(NSString *)string
{
return ([self hasSuffix:string]) ? YES : NO;
} // 用新字符替换字符串中的特定字符
- (NSString *)replaceCharcter:(NSString *)olderChar withCharcter:(NSString *)newerChar
{
return [self stringByReplacingOccurrencesOfString:olderChar withString:newerChar];
} // 从特定的位置获取子字符串,以使其正确
- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end
{
NSRange r;
r.location = begin;
r.length = end - begin;
return [self substringWithRange:r];
} // 将子字符串添加到主字符串
- (NSString *)addString:(NSString *)string
{
if(!string || string.length == )
return self; return [self stringByAppendingString:string];
} // 从字符串中删除指定字符串
-(NSString *)removeSubString:(NSString *)subString
{
if ([self containsString:subString])
{
NSRange range = [self rangeOfString:subString];
return [self stringByReplacingCharactersInRange:range withString:@""];
}
return self;
} // 字符串只包含字母
- (BOOL)containsOnlyLetters
{
NSCharacterSet *letterCharacterset = [[NSCharacterSet letterCharacterSet] invertedSet];
return ([self rangeOfCharacterFromSet:letterCharacterset].location == NSNotFound);
} // 字符串只包含数字
- (BOOL)containsOnlyNumbers
{
NSCharacterSet *numbersCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@""] invertedSet];
return ([self rangeOfCharacterFromSet:numbersCharacterSet].location == NSNotFound);
} // 字符串中包含数字和字母
- (BOOL)containsOnlyNumbersAndLetters
{
NSCharacterSet *numAndLetterCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
return ([self rangeOfCharacterFromSet:numAndLetterCharSet].location == NSNotFound);
} // 字符串包含在数组中
- (BOOL)isInThisarray:(NSArray*)array
{
for(NSString *string in array) {
if([self isEqualToString:string]) {
return YES;
}
}
return NO;
} // 数组转换为字符串
+ (NSString *)getStringFromArray:(NSArray *)array
{
return [array componentsJoinedByString:@" "];
} // 字符串转换为数组
- (NSArray *)getArray
{
return [self componentsSeparatedByString:@" "];
} // 获取应用程序版本
+ (NSString *)getMyApplicationVersion
{
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleVersion"];
return version;
} // 获取应用程序名称
+ (NSString *)getMyApplicationName
{
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *name = [info objectForKey:@"CFBundleDisplayName"];
return name;
} // 字符串转换为NSData
- (NSData *)convertToData
{
return [self dataUsingEncoding:NSUTF8StringEncoding];
} // NSData转换为字符串
+ (NSString *)getStringFromData:(NSData *)data
{
return [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
} // 是否为邮件格式
- (BOOL)isValidEmail
{
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [emailTestPredicate evaluateWithObject:self];
} // 是否为电话格式
- (BOOL)isVAlidPhoneNumber
{
NSString *regex = @"[235689][0-9]{6}([0-9]{3})?";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [test evaluateWithObject:self];
} // 是否为URL格式
- (BOOL)isValidUrl
{
NSString *regex =@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [urlTest evaluateWithObject:self];
} @end

iOS - NSString 封装的更多相关文章

  1. IOS开发-封装数据库sqlite3之为何选择FMDB

    为什么使用第三方轻量级框架FMDB? FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语 ...

  2. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  3. iOS | AFNetworking封装

    为大家分享一个IOS处理网络请求,网络上传,网络下载等功能全面的一个第三方框架-AFNetworking,这是一个使用非常方便的网络框架. 最新的版本是基于NSURLSession,原来的NSURLC ...

  4. iOS (封装)一句话调用系统的alertView和alertController

    前言: 本文仅作参考存留,请用新版封装:iOS 更加优雅便捷的UIAlertView/UIAlertController封装使用 UIAlertController是iOS8.0之后出来的新方法,其将 ...

  5. iOS NSURLSession 封装下载类

    周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...

  6. ios uiview封装动画(摘录)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  7. iOS方法封装

    (void) setSubView:(UIView *)masterView subCCGRect:(CGRect)subCCGRect imageName:(NSString *)imageName ...

  8. 勾勾街:用最小的成本封装一个苹果IOS APP! 封装技术再度升级~

    勾勾街自上线以来,“遭到”大量群众的喜爱... 只能用遭到这个词儿,因为大家好像都被憋了很久了,哈哈哈! 我们的技术是先进的,也是首创的,但最近发现了另一个网站,把我们的技术抄走了.... 本来这个事 ...

  9. ios中封装网络和tableview的综合运用

    1:封装网络请求 类 #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" #import ...

随机推荐

  1. shuts down an ExecutorService

    shuts down an ExecutorService in two phases, first by calling shutdown to reject incoming tasks, and ...

  2. zend studio 10.6.2破解和汉化

    破解文件下载地址 http://dldx.csdn.net/fd.php?i=881874911175745&s=b2f091d89f675e30c36dcc00c4cd2702   下载破解 ...

  3. YOLO3训练widerface数据集

    因为YOLO3速度精度都很棒,所以想训练一下人脸模型,废话不多,进入正题 1写所有的配置文件 1.1 YOLO3-face.cfg 个人感觉YOLO的配置文件骑士和caffe差不多 在cfg/YOLO ...

  4. Oracle数据去重

    一.完全重复数据去重方法    具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表. 对于表中完全重 ...

  5. Centos 6.5 下Nginx安装部署https服务器

    一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩.1.选定源码目录选定目录 /usr/local/cd /usr/local/2.安装PCRE库cd /usr/ ...

  6. 2-5 Flutter开发环境与Android开发环境设置详解(Windows)

    第二个是国内服务器的网址 andoid stuido的一些使用的说明文档 https://developer.android.google.cn/studio/intro 安装Flutter Dart ...

  7. php array数组(第一部分)

    创建一个数组 <?php $arr = array("My","name","is","zhangsan"); e ...

  8. linux多线程加解锁

    1.动态方式使用互斥量,该类型的互斥量在定义时不进行初始化,需要在使用之前初始化,使用结束销毁 1.1.定义一个锁变量:         pthread_mutex_t g_mutex_Msg; 1. ...

  9. L2-013. 红色警报 (并查集)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  10. pandas基础(3)_数据处理

    1:删除重复数据 使用duplicate()函数检测重复的行,返回元素为bool类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为true >>> df =D ...