//
// NSString+ADD.h
//
// Copyright (c) 2015年伊卡洛斯. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#define KS(String) ([NSString stringWithFormat:@"%@",String])
#define KCOLOR(color) ([NSString colorWithHexString:color])
@interface NSString (ADD)
/**
* 字符串长度超过8,只取前8位
*/
+ (NSString *)getEightStringWith:(NSString *)string;
/**
* 设置段落样式
*
* @param lineSpacing 行高
* @param textcolor 字体颜色
* @param font 字体
*
* @return 富文本
*/
- (NSAttributedString *)stringWithParagraphlineSpeace:(CGFloat)lineSpacing
textColor:(UIColor *)textcolor
textFont:(UIFont *)font;
/**
* 计算富文本字体高度
*
* @param lineSpeace 行高
* @param font 字体
* @param width 字体所占宽度
*
* @return 富文本高度
*/
- (CGFloat)getSpaceLabelHeightwithSpeace:(CGFloat)lineSpeace withFont:(UIFont*)font withWidth:(CGFloat)width;
/**
* 设置在一个文本中所有特殊字符的特殊颜色
* @pragma allStr 所有字符串
* @pragma specifiStr 特殊字符
* @pragma color 默认特殊字符颜色 红色
* @pragma font 默认字体 systemFont 17.号字
**/
+ (NSMutableAttributedString *)setAllText:(NSString *)allStr andSpcifiStr:(NSString *)specifiStr;
+ (NSMutableAttributedString *)setAllText:(NSString *)allStr andSpcifiStr:(NSString *)specifiStr withColor:(UIColor *)color specifiStrFont:(UIFont *)font;
/**
* 16位颜色色值处理
*/
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;
+ (UIColor *)colorWithHexString:(NSString *)color;
/**
* 通过给定的尺寸计算文本的高度和宽度
*
* @param string 文本内容
* @param font 字体大小
* @param size 给定尺寸
*/
- (CGSize)stringBodfont:(CGFloat)font size:(CGSize)size;
- (CGSize)stringfont:(CGFloat)font size:(CGSize)size;
+ (CGSize)stringSize:(NSString *)string font:(CGFloat)font size:(CGSize)size;
/**
* 获取当前日期,2015-9-10周四
*/
+ (NSString *)getTimeWithDateAddWeek:(NSDate *)date;
/**
* 获取当前日期,2015-09-05
*/
+ (NSString *)getTimeWithDate:(NSDate *)date;
/**
* 获取日期,2015年5月
*/
+ (NSString *)getChinaTimeWithDate:(NSDate *)date;
/**
* 获取日期,2015年5月1日
*/
+ (NSString *)getChinaTimeDetailWithDate:(NSDate *)date;
/**
* 获取日期,2015-5
*/
+ (NSString *)getTimeDate:(NSDate *)date;
/**
* 获取日期,05-01
*/
+ (NSString *)getCustomTimeWithDate:(NSDate *)date;
/**
* 根据一个字符串日期转换成日期类formatterStr (yyyy-MM-dd HH:mm:ss)
*/
+ (NSString *)getDateWithDate:(NSDate *)date andType:(NSString *)formatterStr;
//---------------------------
/**将简单数据保存到偏好设置*/
+ (void)saveData:(id)objc withKey:(NSString *)key;
/**根据对应的key取出保存的数据*/
+ (instancetype)getDataWithKey:(NSString *)key;
/**将一组数据保存到偏好设置*/
+ (void)saveArrayData:(id)objc withKey:(NSString *)key;
/**根据对应的key取出保存的一组数据*/
+ (NSArray *)getArrayDataWithKey:(NSString *)key;
/**将字典数据保存到偏好设置*/
+ (void)saveDictData:(id)objc withKey:(NSString *)key;
/**根据对应的key取出保存的字典数据*/
+ (NSDictionary *)getDictDataWithKey:(NSString *)key;
/**根据文件名保存一个复杂数据*/
+ (void)saveOneComplexData:(id)objc withFileName:(NSString *)name;
/**根据文件名取出一个复杂数据*/
+ (instancetype)getOneComplexDataWithFileName:(NSString *)name;
/**根据文件名保存一组复杂数据*/
+ (void)saveArrayComplexData:(id)objc withFileName:(NSString *)name;
/**根据文件名从一组中删除一条复杂数据*/
+ (void)deleteArrayComplexData:(id)objc withFileName:(NSString *)name;
/**根据文件名取出一组复杂数据*/
+ (NSArray *)getArrayComplexDataWithFileName:(NSString *)name;
/**根据文件名保存字典复杂数据*/
+ (void)saveDictionaryComplexData:(id)objc withFileName:(NSString *)name;
/**根据文件名取出字典复杂数据*/
+ (NSDictionary *)getDictionaryComplexDataWithFileName:(NSString *)name;
/**根据文件名获取文件路径*/
+ (NSString *)getFilePathWithName:(NSString *)name;
/**根据文件名清除保存的数据*/
+ (void)clearDataWithFileName:(NSString *)name;
//---------------------------可变字符串带颜色
+ (NSMutableAttributedString *)changeString:(NSString *)str byColor:(UIColor *)color range:(NSRange )range;
+ (NSMutableAttributedString *)changeString:(NSString *)str byFont:(UIFont *)font range:(NSRange )range;
/*============================================================================*/
//获取有效小数
+ (NSString*)getTheCorrectNum:(NSString*)tempString;
/**
* MD5加密
*/
- (NSString *)stringFromMD5;
/*============================================================================*/
/*!
* @brief 把格式化的JSON格式的字符串转换成字典
* @param jsonString JSON格式的字符串
* @return 返回字典
*/
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString;
//词典转换为字符串
+ (NSString*)dictionaryToJson:(NSDictionary *)dic;
@end
=============================================================分割线==========================================================
//
// NSString+ADD.h
//
// Copyright (c) 2015年 伊卡洛斯. All rights reserved.
//
#import "NSString+ADD.h"
#import <CommonCrypto/CommonDigest.h>
#if __has_feature(objc_arc)
#define SAFE_AUTORELEASE(a) (a)
#else
#define SAFE_AUTORELEASE(a) [(a) autorelease]
#endif
@class NSArray,NSMutableArray,NSDictionary,NSMutableDictionary;
@implementation NSString (ADD)
+ (NSString *)getEightStringWith:(NSString *)string {
NSString *text = string;
if (string.length >8) {
text = [string substringToIndex:8];
}
return text;
}
/**
* 设置段落样式
*
* @param lineSpacing 行高
* @param textcolor 字体颜色
* @param font 字体
*
* @return 富文本
*/
- (NSAttributedString *)stringWithParagraphlineSpeace:(CGFloat)lineSpacing
textColor:(UIColor *)textcolor
textFont:(UIFont *)font {
// 设置段落
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStylealloc] init];
paragraphStyle.lineSpacing = lineSpacing;
// NSKernAttributeName字体间距
NSDictionary *attributes =@{ NSParagraphStyleAttributeName:paragraphStyle};
NSMutableAttributedString * attriStr = [[NSMutableAttributedStringalloc] initWithString:selfattributes:attributes];
// 创建文字属性
NSDictionary * attriBute =@{NSForegroundColorAttributeName:textcolor,NSFontAttributeName:font};
[attriStr addAttributes:attriButerange:NSMakeRange(0,self.length)];
return attriStr;
}
/**
* 计算富文本字体高度
*
* @param lineSpeace 行高
* @param font 字体
* @param width 字体所占宽度
*
* @return 富文本高度
*/
- (CGFloat)getSpaceLabelHeightwithSpeace:(CGFloat)lineSpeace withFont:(UIFont*)font withWidth:(CGFloat)width {
NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStylealloc] init];
// paraStyle.lineBreakMode = NSLineBreakByCharWrapping;
/** 行高 */
paraStyle.lineSpacing = lineSpeace;
// NSKernAttributeName字体间距
NSDictionary *dic =@{NSFontAttributeName:font,NSParagraphStyleAttributeName:paraStyle};
CGSize size = [selfboundingRectWithSize:CGSizeMake(width,MAXFLOAT)options:NSStringDrawingUsesLineFragmentOriginattributes:dic context:nil].size;
return size.height;
}
#pragma mark -- 设置在一个文本中所有特殊字符的特殊颜色
+ (NSMutableAttributedString *)setAllText:(NSString *)allStr andSpcifiStr:(NSString *)specifiStr withColor:(UIColor *)color specifiStrFont:(UIFont *)font {
NSMutableAttributedString *mutableAttributedStr = [[NSMutableAttributedStringalloc] initWithString:allStr];
if (color ==nil) {
color = [UIColorredColor];
}
if (font ==nil) {
font = [UIFontsystemFontOfSize:17.];
}
// NSArray *array = [allStr componentsSeparatedByString:specifiStr];//array.cout-1是所有字符特殊字符出现的次数
NSRange searchRange =NSMakeRange(0, [allStrlength]);
NSRange range;
//拿到所有的相同字符的range
while ((range = [allStrrangeOfString:specifiStroptions:0range:searchRange]).location !=NSNotFound) {
//改变多次搜索时searchRange的位置
searchRange = NSMakeRange(NSMaxRange(range), [allStrlength] - NSMaxRange(range));
//设置富文本
[mutableAttributedStr addAttribute:NSForegroundColorAttributeNamevalue:color range:range];
[mutableAttributedStr addAttribute:NSFontAttributeNamevalue:font range:range];
}
return mutableAttributedStr;
}
+ (NSMutableAttributedString *)setAllText:(NSString *)allStr andSpcifiStr:(NSString *)specifiStr {
return [selfsetAllText:allStr andSpcifiStr:specifiStr withColor:nilspecifiStrFont:nil];
}
- (NSString *)stringDict:(NSDictionary *)dict {
NSMutableString *string =self.mutableCopy;
for (NSString *keyin dict) {
[string appendString:[NSStringstringWithFormat:@"&%@==%@",key,dict[key]]];
}
return string;
}
- (NSString *)stringFromMD5 {
if(self ==nil || [selflength] == 0)
returnnil;
constchar *value = [selfUTF8String];
unsignedchar outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, (int)strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableStringalloc] initWithCapacity:CC_MD5_DIGEST_LENGTH *2];
for(NSInteger count =0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
returnSAFE_AUTORELEASE(outputString);
}
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha {
//删除字符串中的空格
NSString *cString = [[colorstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]]uppercaseString];
// String should be 6 or 8 characters
if ([cStringlength] < 6) {
return [UIColorclearColor];
}
// strip 0X if it appears
//如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾
if ([cStringhasPrefix:@"0X"]) {
cString = [cString substringFromIndex:2];
}
//如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾
if ([cStringhasPrefix:@"#"]) {
cString = [cString substringFromIndex:1];
}
if ([cStringlength] != 6) {
return [UIColorclearColor];
}
// Separate into r, g, b substrings
NSRange range;
range.location =0;
range.length =2;
//r
NSString *rString = [cStringsubstringWithRange:range];
//g
range.location =2;
NSString *gString = [cStringsubstringWithRange:range];
//b
range.location =4;
NSString *bString = [cStringsubstringWithRange:range];
// Scan values
unsignedint r, g, b;
[[NSScannerscannerWithString:rString]scanHexInt:&r];
[[NSScannerscannerWithString:gString]scanHexInt:&g];
[[NSScannerscannerWithString:bString]scanHexInt:&b];
return [UIColorcolorWithRed:((float)r /255.0f) green:((float)g /255.0f) blue:((float)b /255.0f) alpha:alpha];
}
//默认alpha值为1
+ (UIColor *)colorWithHexString:(NSString *)color {
return [selfcolorWithHexString:coloralpha:1.0f];
}
+ (NSMutableAttributedString *)changeString:(NSString *)str byColor:(UIColor *)color range:(NSRange )range {
NSMutableAttributedString *changeStr = [[NSMutableAttributedStringalloc]initWithString:str];
//设置:在range之间个单位长度内的内容显示成color色
[changeStr addAttribute:NSForegroundColorAttributeNamevalue:color range:range];
return changeStr;
}
+ (NSMutableAttributedString *)changeString:(NSString *)str byFont:(UIFont *)font range:(NSRange )range {
NSMutableAttributedString *changeStr = [[NSMutableAttributedStringalloc]initWithString:str];
//设置:在range之间个单位长度内的内容显示成color色
[changeStr addAttribute:NSFontAttributeNamevalue:font range:range];
return changeStr;
}
- (CGSize)stringBodfont:(CGFloat)font size:(CGSize)size {
CGRect bounds = [selfboundingRectWithSize:sizeoptions:NSStringDrawingUsesLineFragmentOriginattributes:@{NSFontAttributeName:[UIFontboldSystemFontOfSize:font]}context:nil];
return bounds.size;
}
- (CGSize)stringfont:(CGFloat)font size:(CGSize)size {
CGRect bounds = [selfboundingRectWithSize:sizeoptions:NSStringDrawingUsesLineFragmentOriginattributes:@{NSFontAttributeName:[UIFontsystemFontOfSize:font]}context:nil];
return bounds.size;
}
+ (CGSize)stringSize:(NSString *)string font:(CGFloat)font size:(CGSize)size {
CGRect bounds = [stringboundingRectWithSize:sizeoptions:NSStringDrawingUsesLineFragmentOriginattributes:@{NSFontAttributeName:[UIFontsystemFontOfSize:font]}context:nil];
return bounds.size;
}
+ (NSString *)getTimeWithDateAddWeek:(NSDate *)date {
NSArray *weekArr =@[@"周日",@"周一",@"周二",@"周三",@"周四",@"周五",@"周六"];
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
NSString *week = weekArr[comps.weekday -1];
return [NSStringstringWithFormat:@"%ld-%02ld-%02ld %@",comps.year,comps.month,comps.day,week];
}
+ (NSString *)getTimeWithDate:(NSDate *)date {
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
return [NSStringstringWithFormat:@"%ld-%02ld-%02ld",comps.year,comps.month,comps.day];
}
+ (NSDateComponents *)dateComponentsWithDate:(NSDate *)date {
NSCalendar *calendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
/**
* 枚举值按需更改
*/
NSInteger unitFlags =NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday;
NSDateComponents *comps =[calendarcomponents:unitFlags fromDate:date];
return comps;
}
+ (NSString *)getTimeDate:(NSDate *)date {
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
return [NSStringstringWithFormat:@"%ld-%ld",comps.year,comps.month];
}
+ (NSString *)getChinaTimeWithDate:(NSDate *)date {
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
return [NSStringstringWithFormat:@"%ld年%ld月",comps.year,comps.month];
}
+ (NSString *)getChinaTimeDetailWithDate:(NSDate *)date {
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
return [NSStringstringWithFormat:@"%ld年%ld月%ld日",comps.year,comps.month,comps.day];
}
+ (NSString *)getCustomTimeWithDate:(NSDate *)date {
NSDateComponents *comps = [NSStringdateComponentsWithDate:date];
return [NSStringstringWithFormat:@"%02ld.%02ld",comps.month,comps.day];
}
+ (NSString *)getDateWithDate:(NSDate *)date andType:(NSString *)formatterStr{
NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormatter setDateFormat:formatterStr];
//用[NSDate date]可以获取系统当前时间
NSString *currentDateStr = [dateFormatterstringFromDate:date];
return currentDateStr;
}
//将单一数据保存到偏好设置
+ (void)saveData:(id)objc withKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
[userDefault setObject:objcforKey:key];
[userDefault synchronize];
}
//根据对应的key取出保存的单一数据
+ (instancetype)getDataWithKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
id objc = [userDefaultobjectForKey:key];
return objc;
}
//将一组数据保存到偏好设置
+ (void)saveArrayData:(id)objc withKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
[userDefault setObject:objcforKey:key];
[userDefault synchronize];
}
//根据对应的key取出保存的一组数据
+ (NSArray *)getArrayDataWithKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
NSArray *objcArr = [userDefaultobjectForKey:key];
return objcArr;
}
//将字典数据保存到偏好设置
+ (void)saveDictData:(id)objc withKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
[userDefault setObject:objcforKey:key];
[userDefault synchronize];
}
//根据对应的key取出保存的字典数据
+ (NSDictionary *)getDictDataWithKey:(NSString *)key {
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
NSDictionary *objcArr = [userDefaultobjectForKey:key];
return objcArr;
}
//根据文件名保存一个复杂数据
+ (void)saveOneComplexData:(id)objc withFileName:(NSString *)name {
NSString *path = [selfgetFilePathWithName:name];
NSData *data = [selfdataWithObjc:objc];
[data writeToFile:pathatomically:YES];
}
//根据文件名取出一个复杂数据
+ (instancetype)getOneComplexDataWithFileName:(NSString *)name {
NSString *path = [selfgetFilePathWithName:name];
NSData *data = [NSDatadataWithContentsOfFile:path];
id objc = [selfgetObjcWithData:data];
return objc;
}
//根据文件名保存一组复杂数据
+ (void)saveArrayComplexData:(id)objc withFileName:(NSString *)name {
NSString *path = [selfgetFilePathWithName:name];
NSArray *dataArr = [selfgetArrayComplexDataWithFileName:name];
NSMutableArray *mutableArr = [NSMutableArrayarrayWithArray:dataArr];
[mutableArr insertObject:objcatIndex:0];
[NSKeyedArchiverarchiveRootObject:mutableArrtoFile:path];
}
//根据文件名删除一条复杂数据
+ (void)deleteArrayComplexData:(id)objc withFileName:(NSString *)name {
NSString *path = [selfgetFilePathWithName:name];
NSArray *dataArr = [selfgetArrayComplexDataWithFileName:name];
NSMutableArray *mutableArr = [NSMutableArrayarray];
for (id objc_1in dataArr) {
if (![[objctitle] isEqualToString:[objc_1title]]) {
[mutableArr addObject:objc_1];
}
}
[NSKeyedArchiverarchiveRootObject:mutableArrtoFile:path];
}
//根据文件名取出一组复杂数据
+ (NSArray *)getArrayComplexDataWithFileName:(NSString *)name {
NSString *path = [selfgetFilePathWithName:name];
NSArray *array = [NSKeyedUnarchiverunarchiveObjectWithFile:path];
return array;
}
//根据文件名保存字典简单数据
+ (void)saveDictionaryComplexData:(id)objc withFileName:(NSString *)name {
// NSString *path = [self getFilePathWithName:name];
}
//根据文件名取出字典简单数据
+ (NSDictionary *)getDictionaryComplexDataWithFileName:(NSString *)name {
// NSString *path = [self getFilePathWithName:name];
returnnil;
}
//归档单一对象数据
+ (NSData *)dataWithObjc:(id)objc {
return [NSKeyedArchiverarchivedDataWithRootObject:objc];
}
//反归档单一对象数据
+ (instancetype)getObjcWithData:(NSData *)data {
return [NSKeyedUnarchiverunarchiveObjectWithData:data];
}
//根据文件名清除保存的数据
+ (void)clearDataWithFileName:(NSString *)name {
NSFileManager *manger = [NSFileManagerdefaultManager];
NSString *path = [selfFilePathWithName:name];
[manger removeItemAtPath:patherror:nil];
}
//根据文件名获取文件路径
+ (NSString *)getFilePathWithName:(NSString *)name {
NSString *path = [selfFilePathWithName:name];
NSString *fileName = [NSStringstringWithFormat:@"%@.data",name];
NSString *filePath = [pathstringByAppendingPathComponent:fileName];
return filePath;
}
//根据文件名获取文件夹路径
+ (NSString *)FilePathWithName:(NSString *)name {
NSFileManager *manger = [NSFileManagerdefaultManager];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject];
NSString *fileName = [NSStringstringWithFormat:@"%@",name];
NSString *path = [documentPathstringByAppendingPathComponent:fileName];
BOOL isCreate =NO;
BOOL existed = [mangerfileExistsAtPath:path isDirectory:&isCreate];
if (!(isCreate ==YES && existed == YES)) {
[manger createDirectoryAtPath:pathwithIntermediateDirectories:YESattributes:nilerror:nil];
}
return path;
}
/*
* 处理一个数字加小数点的字符串,前面无0,保留两位。网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的。
*/
+ (NSString*)getTheCorrectNum:(NSString*)tempString {
//先判断第一位是不是 . ,是 .补0
if ([tempStringhasPrefix:@"."]) {
tempString = [NSStringstringWithFormat:@"0%@",tempString];
}
//计算截取的长度
NSUInteger endLength = tempString.length;
//判断字符串是否包含 .
if ([tempStringcontainsString:@"."]) {
//取得 .的位置
NSRange pointRange = [tempStringrangeOfString:@"."];
//判断 .后面有几位
NSUInteger f = tempString.length -1 - pointRange.location;
//如果大于2位就截取字符串保留两位,如果小于两位,直接截取
if (f >2) {
endLength = pointRange.location +2;
}
}
//先将tempString转换成char型数组
NSUInteger start =0;
constchar *tempChar = [tempStringUTF8String];
//遍历,去除取得第一位不是0的位置
for (int i =0; i < tempString.length; i++) {
if (tempChar[i] =='0') {
start++;
}else {
break;
}
}
//如果第一个字母为 . start后退一位
if (tempChar[start] =='.') {
start--;
}
//根据最终的开始位置,计算长度,并截取
NSRange range = {start,endLength - start};
tempString = [tempString substringWithRange:range];
return tempString;
}
/*!
* @brief 把格式化的JSON格式的字符串转换成字典
* @param jsonString JSON格式的字符串
* @return 返回字典
*/
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString ==nil) {
returnnil;
}
NSData *jsonData = [jsonStringdataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
returnnil;
}
return dic;
}
//词典转换为字符串
+ (NSString*)dictionaryToJson:(NSDictionary *)dic {
NSError *parseError =nil;
NSData *jsonData = [NSJSONSerializationdataWithJSONObject:dic options:NSJSONWritingPrettyPrintederror:&parseError];
return [[NSStringalloc] initWithData:jsonDataencoding:NSUTF8StringEncoding];
}
@end
NSUserDefaults轻量级永久存储数据使用介绍:http://blog.csdn.net/liushihua147/article/details/45603281