记录字符串的处理,不是一个简单的工作。

NSString是代码中随处可见的类型,也是应用和处理繁多的对象,在此只记录需要常备的方法,并且加以说明。

#pragma mark -- 【计算字符串尺寸
+ (CGSize)getStringSizeWith:(NSString *)string attributes:(NSDictionary *)attributes; + (CGSize)getStringSizeWith:(NSString *)string attributes:(NSDictionary *)attributes maxWidth:(CGFloat)maxWidth; + (CGSize)getStringSizeWith:(NSString *)string attributes:(NSDictionary *)attributes maxHeight:(CGFloat)maxHeight; + (CGSize)getStringSizeWith:(NSString *)string font:(UIFont *)font paragraphStyle:(NSParagraphStyle *)paragraphStyle maxWidth:(CGFloat)maxWidth; + (CGSize)getStringSizeWith:(NSString *)string font:(UIFont *)font lineHeight:(CGFloat)lineHeight maxWidth:(CGFloat)maxWidth; + (CGSize)getStringSizeWith:(NSString *)string font:(UIFont *)font; + (CGSize)getStringSizeWith:(NSString *)string font:(UIFont *)font maxWidth:(CGFloat)maxWidth; + (CGSize)getStringSizeWith:(NSString *)string font:(UIFont *)font maxHeight:(CGFloat)maxHeight;
#pragma mark -- 】计算字符串尺寸 #pragma mark -- 【生成属性字符串
+ (NSAttributedString *)getAttributedStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color lineHeight:(CGFloat)lineHeight maxWidth:(CGFloat)maxWidth; + (NSAttributedString *)getAttributedStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color paragraphStyle:(NSParagraphStyle *)paragraphStyle maxWidth:(CGFloat)maxWidth;
#pragma mark -- 】生成属性字符串 #pragma mark -- 【处理时间字符串
+ (NSString *)getCurrentDateString; + (NSString *)getCurrentDateStringWithFormat:(NSString *)dateFormat; + (NSString *)getDateStringWithTimeInterval:(NSTimeInterval)timeInterval; + (NSString *)getDateStringWithTimeInterval:(NSTimeInterval)timeInterval dateFormat:(NSString *)dateFormat; + (NSTimeInterval)getTimeIntervalWithDateString:(NSString *)dateString; + (NSDateComponents *)getDateComponentsWithDateString:(NSString *)dateString; + (NSDateComponents *)getDateComponentsWithTimeInterval:(NSTimeInterval)timeInterval; + (NSString *)getContentPublishedTimeStringWithDateString:(NSString *)dateString;
#pragma mark -- 】处理时间字符串 #pragma mark -- 【处理网络请求相关字符串
+ (NSString *)getSafeDecodeStringFromJsonValue:(NSString *)jsonValue; /**
* 被解析的url字符串格式为:xxxxxx?a=xxx&b=xxx
*
* @param urlString urlString description
*
* @return return value description
*/
+ (NSDictionary *)getParametersDictionaryWithUrlString:(NSString *)urlString; /**
* 被解析的url字符串格式为:xxxxxx/realname_320x640.png(/jpg)
*
* @param urlString urlString description
*
* @return return value description
*/
+ (CGSize)getImageOriginalSizeWithUrlString:(NSString *)urlString; + (CGSize)getImageShowSizeWithUrlString:(NSString *)urlString maxWidth:(NSInteger)maxWidth; /**
* 被解析的url字符串格式为:xxxxxx/realname_320x640.png(/jpg)
*
* @param originalUrlString originalUrlString description
* @param newWidth newWidth description
*
* @return 在原urlString后增加类似"?act=resize&x=320",用于服务器裁剪尺寸
*/
+ (NSString *)getImageResizedUrlStringWithOriginalUrlString:(NSString *)originalUrlString newWidth:(NSInteger)newWidth;
#pragma mark -- 】处理网络请求相关字符串 #pragma mark -- 其他功能方法
/**
* 获取字符串的字节长度(一个汉字占两个字节长度)
*
* @param string string description
*
* @return return value description
*/
+ (NSInteger)getBytesLengthWithString:(NSString *)string; /**
* 验证手机号是否合理
*
* @param phoneNum phoneNum description
*
* @return return value description
*/
+ (BOOL)isValidatedMobliePhoneNum:(NSString *)phoneNum; + (void)printAllCurrentSupportedFonts; + (NSString *)getDeviceVersion; + (NSString *)getAppShortVersion; + (NSString *)getAppBundleVersion;

说明:

1.计算字符串尺寸的方法,sizeWithFont系列方法已经被废物,建议改为boundingRectWithSize方法;NSAttributedString也有boundingRectWithSize方法,如果已知属性字符串可以直接使用。请查看UIKit/NSStringDrawing.h中NSString和NSAttributedString的扩展方法

+ (CGSize)getStringSizeWith:(NSString *)string attributes:(NSDictionary *)attributes
{
CGSize size = [string boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size; return size;
}

3.生成属性字符串的方法中,NSMutableParagraphStyle的对象用于设置段落属性(行高、行间距、段落间距、对齐、书写方向、首行缩进、行首缩进、行尾缩进),请查看UIKit/NSParagraphStyle.h

+ (NSAttributedString *)getAttributedStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color lineHeight:(CGFloat)lineHeight maxWidth:(CGFloat)maxWidth
{
CGFloat perLineHeight = [StringHelper getStringSizeWith:@"内容" font:font].height;
CGFloat lineSpacing = (lineHeight - perLineHeight)/2.5;//2.5是在实际应用中,调校的值
perLineHeight = lineHeight - lineSpacing; //设置文字段落
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineHeightMultiple = perLineHeight;
paragraphStyle.maximumLineHeight = perLineHeight;
paragraphStyle.minimumLineHeight = perLineHeight;
paragraphStyle.lineBreakMode = commonLineBreakMode;
paragraphStyle.lineSpacing = lineSpacing;//行间距
paragraphStyle.paragraphSpacing = ;//段间距
paragraphStyle.alignment = commonTextAlignment; return [self getAttributedStringWithString:string font:font color:color paragraphStyle:paragraphStyle maxWidth:maxWidth];
} + (NSAttributedString *)getAttributedStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color paragraphStyle:(NSParagraphStyle *)paragraphStyle maxWidth:(CGFloat)maxWidth
{
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:font forKey:NSFontAttributeName];
[dic setObject:color forKey:NSForegroundColorAttributeName];
[dic setObject:paragraphStyle forKey:NSParagraphStyleAttributeName]; NSAttributedString* attributedString; if (string == nil) {
attributedString = [[NSAttributedString alloc] initWithString:@" " attributes:dic];
}else{
attributedString = [[NSAttributedString alloc] initWithString:string attributes:dic];
} return attributedString;
}

4.NSFontAttributeName、NSForegroundColorAttributeName、NSParagraphStyleAttributeName为NSAttributedString常用属性键值,更多查看UIKit/NSAttributedString.h

5.转换时间字符串,需要记录一下常用时间格式占位字符:

#pragma mark -- 时间格式占位符
//G: 公元时代,例如AD公元
//yy: 年的后2位
//yyyy: 完整年
//MM: 月,显示为1-12,带前置0
//MMM: 月,显示为英文月份简写,如 Jan
//MMMM: 月,显示为英文月份全称,如 Janualy
//dd: 日,2位数表示,如02
//d: 日,1-2位显示,如2,无前置0
//EEE: 简写星期几,如Sun
//EEEE: 全写星期几,如Sunday
//aa: 上下午,AM/PM
//H: 时,24小时制,0-23
//HH: 时,24小时制,带前置0
//h: 时,12小时制,无前置0
//hh: 时,12小时制,带前置0
//m: 分,1-2位
//mm: 分,2位,带前置0
//s: 秒,1-2位
//ss: 秒,2位,带前置0
//S: 毫秒
//Z: GMT(时区)
+ (NSString *)getCurrentDateString
{
return [self getCurrentDateStringWithFormat:@"yyyy-MM-dd HH:mm:ss"];
} + (NSString *)getCurrentDateStringWithFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:dateFormat];
NSDate *currentDate = [NSDate date];
NSString *currentDateString = [dateFormatter stringFromDate:currentDate]; return currentDateString;
}

6.getDateComponentsWithDateString方法用于得到日期组成对象,实现代码、测试代码、输入log如下:

+ (NSDateComponents *)getDateComponentsWithDateString:(NSString *)dateString
{
NSTimeInterval timeInterval = [self getTimeIntervalWithDateString:dateString]; return [self getDateComponentsWithTimeInterval:timeInterval];
} + (NSDateComponents *)getDateComponentsWithTimeInterval:(NSTimeInterval)timeInterval
{
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSCalendarUnit unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitWeekOfMonth | NSCalendarUnitWeekOfYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *components = [calendar components:unitFlags fromDate:date]; return components;
}
    NSDateComponents *components = [StringHelper getDateComponentsWithDateString:@"2016-09-12 12:56:10"];
LOG(@"%@", components); components = [StringHelper getDateComponentsWithDateString:@"2016-09-11 12:56:10"];
LOG(@"%@", components); components = [StringHelper getDateComponentsWithDateString:@"2016-09-10 12:56:10"];
LOG(@"%@", components);
-- ::12.283 base[:] <NSDateComponents: 0x7fb0f9570770>
Calendar Year:
Month:
Leap month: no
Day:
Hour:
Minute:
Second:
Week of Year:
Week of Month:
Weekday:
-- ::15.600 base[:] <NSDateComponents: 0x7fb0f961e760>
Calendar Year:
Month:
Leap month: no
Day:
Hour:
Minute:
Second:
Week of Year:
Week of Month:
Weekday:
-- ::15.601 base[:] <NSDateComponents: 0x7fb0f94b6620>
Calendar Year:
Month:
Leap month: no
Day:
Hour:
Minute:
Second:
Week of Year:
Week of Month:
Weekday:

需要注意的是,Weekday“一”为“周日”,“七”为“周六”,按照西方习俗;Week of Month表示本月第几周;Week of Year表示今年第几周。

7.getDeviceVersion方法更新了iPhone 7和iPhone 7 Plus的设备版本判断,详情参考:https://www.theiphonewiki.com/wiki/Models

8.随便一提,如果在新增的NSObject类中,无法使用CGFloat、CGPoint之类的类型,是因为没有引用这些类型所在的头文件,在预编译头文件中引用即可:#import <UIKit/UIKit.h>

base项目已更新:git@github.com:ALongWay/base.git

App开发流程之字符串处理工具类的更多相关文章

  1. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  2. iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具

    如果想进入移动app开发这个领域,你总能从别的开发者或者网上或者书上找到各种各样的方法和工具,对于新手来说,还没有摸清门路就已经陷入迷茫了.这里推荐20个可以帮你简化app开发流程的工具.很多开发者都 ...

  3. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  4. Java操作字符串的工具类

    操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...

  5. Android快速开发不可或缺的11个工具类

     Android快速开发不可或缺的11个工具类  :http://www.devst ore.cn/code/info/363.html

  6. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  7. Java随机字符串:随机数字字符串,工具类

    Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...

  8. app开发流程有哪些

    app开发流程是需求方和供求方相互协调的过程,一般分为需求分析.功能设计.功能实现.项目测试.上线等几个步骤,下面我们就来一起看看ytkah团队进行app开发各个流程主要做哪些事情,让您对app开发设 ...

  9. App开发流程之加密工具类

    科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...

随机推荐

  1. iOS开发中一些常见的并行处理(转)

    本文主要探讨一些常用多任务的最佳实践.包括Core Data的多线程访问,UI的并行绘制,异步网络请求以及一些在运行态内存吃紧的情况下处理大文件的方案等.

其实编写异步处理的程序有很多坑!所以,本文 ...

  2. Bower 手册

    安装 Bower 使用 npm 安装 Bower.(Bower 依赖于 Node, npm 和 Git.) $ npm install -g bower 基本用法 安装程序包 程序包安装命令 bowe ...

  3. 认识SuperSocket 1.6.4

    SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,由江振宇先生开发,之所以选用它是因为一下几点恰好复合项目需求: 开源,基于Apache 2.0协议,可以免费使用到商业项目. 高 ...

  4. (转) 寄存器、RAM、ROM、Flash相关概念区别整理

    转自 http://m.blog.chinaunix.net/uid-30077524-id-5570244.html 文章对这几个东西讲得很清楚,值得收藏. 寄存器 寄存器是中央处理器内的组成部份. ...

  5. thinkphp -- 解决连接mssql后台管理菜单显示中文乱码问题(备忘)

    一开始使用的是mysql,数据库的编码是UTF-8 后来换数据库,mysql换成mssql2005,数据库编码为GBK,管理菜单出现乱码,如下所示(左图正常,右图乱码) 解决方法如下: 第一,查看数据 ...

  6. Pace.js – 超赞的页面加载进度自动指示和 Ajax 导航效果

    在页面中引入 Pace.js  和您所选择主题的 CSS 文件,就可以让你的页面拥有漂亮的加载进度和 Ajax 导航效果.不需要挂接到任何代码,自动检测进展.您可以选择颜色和多种效果,有简约,闪光灯, ...

  7. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  8. Mysql学习笔记(五)数学与日期时间函数

    学习内容: 1.数学函数 2.日期时间函数 这些函数都是很常用的函数...在这里进行简单的介绍... 数学函数: mysql); //取绝对值函数 这个函数可安全地使用于 BIGINT 值. mysq ...

  9. Repository模式中,Update总是失败及其解析

    在Repository模式中,我的Update方法总是无法更新实体,这个非常郁闷,Update方法如下: 1: public virtual void Update(T entity) 2: { 3: ...

  10. Gradle学习系列之八——构建多个Project

    在本系列的上篇文章中,我们讲到了Gradle的依赖管理,在本篇文章中,我们将讲到如何构建多个Project. 请通过以下方式下载本系列文章的Github示例代码: git clone https:// ...