在实际项目开发过程中,发现字符串使用频率还是非常高的,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. 信息安全:Token

    ylbtech-信息安全:Token Token(计算机术语) 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思. 1.令牌返回顶部 1.令牌 (信息安全术语) Token, 令牌,代 ...

  2. bzoj4763

    $分块$ $一个很有趣的技巧$ $在树上选sqrt(n)个关键点,每两个关键点之间的距离<=sqrt(n),每个关键点属于一条链$ $预处理出每两个关键点的bitset$ $每次询问就暴力向上爬 ...

  3. 项目清理和删除svn信息(转)

    svn信息是根据文件夹里面的 .svn 文件夹保存相关配置的,删除此文件夹即可去掉svn信息: linux下: find . -type d -name ".svn"|xargs ...

  4. TCP 连接的握手信息详解

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  5. 《Java多线程编程核心技术》读后感(八)

    不使用等待/通知机制实现线程间通信 使用sleep()结合while(true)死循环来实现多个线程间通信 package Third; import java.util.ArrayList; imp ...

  6. Centos7.2 安装配置 Tengine(nginx)

    一.下载tengine wget http://tengine.taobao.org/download/tengine-2.2.2.tar.gz 二.安装tenginx(nginx)的模块依赖库 yu ...

  7. HDU - 5534 Partial Tree(每种都装的完全背包)

    Partial Tree In mathematics, and more specifically in graph theory, a tree is an undirected graph in ...

  8. MVC+Linq+EF笔记

    using (DataContext ctx = new DataContext()) { /*foreach (var item in ctx.employees) { ViewData[" ...

  9. 从头开始学Web开发—CSS_01

    CSS导入使用及引用的两种方法: 外部引用 外部引用的方式,我们直接可以通过link标签来引用我们写好的一个CSS文件: 在link 标签中,我们通过rel = "stylesheet&qu ...

  10. List Control控件中及时捕获checkbox被选中的消息的解决方案

    转自:http://blog.csdn.net/vycode/article/details/7345073 我的功能需求是:用户可以在List Control里添加item,当无选项被选中(即Che ...