消除字符串首尾空格
(1)系统去首尾空格方法,使用NSString中的str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]方法只是去掉左右两边的空格;
(2)替换的方法,使用NSString *strUrl = [urlString stringByReplacingOccurrencesOfString:@" " withString:@""];可以去掉空格,注意此时生成的strUrl是autorelease属性的,不要妄想对strUrl进行release操作。
中文URL编码(encode)解码(decode)
URL 加码 & 解码:
NSString* string1 = @"https://www.cloudsafe.com/文件夹";
NSString* string1 = @"https://www.cloudsafe.com/文件夹";
NSString* string2 = [string1stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string3 = [string2stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string4 = [string2stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string5 = [string3stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string6 = [string4stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string7 = [string5stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
输出结果: string5 & 6 重复编码encode
string1:https://www.cloudsafe.com/文件夹
string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9
string4:https://www.cloudsafe.com/文件夹
string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string6:https://www.cloudsafe.com/文件夹
string7:https://www.cloudsafe.com/文件夹
中文网址路径转换URLEncode[NSURL URLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题.
方法1:
NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
方法2:
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);
这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.
查看方法2参数说明:
CFStringRefCFURLCreateStringByAddingPercentEscapes(CFAllocatorRefallocator, CFStringRef originalString, CFStringRefcharactersToLeaveUnescaped, CFStringReflegalURLCharactersToBeEscaped, CFStringEncoding encoding);
因此做出修改,写出方法:
NSString *encodedString = (NSString *)
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)urlString,
(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
NULL,
kCFStringEncodingUTF8);
如果在所有的类里都要用到这个方法,可以写成category,然后在头文件import "NSString+URL.h" 即可调用.
NSString+URL.h 文件
- @interface NSString (URL)
- - (NSString *)URLEncodedString;
- @end
NSString+URL.m 文件
- #import "NSString+URL.h"
-
- @implementation NSString (URL)
-
- - (NSString *)URLEncodedString
- {
- NSString *encodedString = (NSString *)
- CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
- (CFStringRef)self,
- (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
- NULL,
- kCFStringEncodingUTF8);
- return encodedString;
- }
- @end
调用方法:
NSString *encodedString = [urlString URLEncodedString];
将字符串转换为日期时间格式
1、如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面列举两种类型: NSString* string = @"20110826134106";
NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[inputFormatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate* inputDate = [inputFormatter dateFromString:string];
NSLog(@"date = %@", inputDate);
NSDateFormatter *outputFormatter = [[[NSDateFormatter alloc] init] autorelease];
[outputFormatter setLocale:[NSLocale currentLocale]];
[outputFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
NSString *str = [outputFormatter stringFromDate:inputDate];
NSLog(@"testDate:%@", str);
两次打印的结果为:
date = 2011-08-26 05:41:06 +0000
testDate:2011年08月26日 13时41分06秒
说明:上面的时间是美国时间,下面的没有设置
NSString* string = @"Wed, 05 May 2011 10:50:00 +0800";
NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[inputFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate* inputDate = [inputFormatter dateFromString:string];
NSLog(@"date = %@", inputDate);
PS:http://www.wangdg.com/?p=207
2、以前一直为这个事情纠结,无奈只能拼接字符串:
NSString *str=@"20120403000000";
NSString *dateStr=[NSString stringWithFormat:@"有效期至:%@年%@月%@日",
[str substringWithRange:NSMakeRange(0, 4)],
[str substringWithRange:NSMakeRange(4, 2)],
[str substringWithRange:NSMakeRange(6, 2)]];
这个方法笨,可是没办法,查了好多资料,都没明白,今天突然明白了,呵呵,只要把那个[inputFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"];@“”里面的格式转化为你字符串的格式一切就OK了,不知道我说明白了吗
3、iOS-NSDateFormatter 格式说明:
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K:时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy
+(id)stringWithContentsOfFile:path encoding:enc err | 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 | +(id)stringWithContentsOfURL:url encoding:enc err创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误+(id)string创建一个新的空字符串+(id)stringWithString:nsstring创建一个新字符串,将其内容设置为 nsstring 内容-(id)initWithString:nsstring将字符串内容设置为 nsstring 内容-(id)initWithContentsOfFile:path encoding:enc error:err将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误-(id)initWithContentsOfURL:url encoding:enc error:err将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误-(UNSigned int)length返回字符串中字符数目-(unichar)characterAtindex:i返回索引i 所在UniCode 字符-(NSString*)substringFromIndex:i返回从索引 i 开始到结尾的子字符串-(NSString*)substringWithRange:range根据指定范围返回子字符串-(NSString*)substringToIndex:i返回从字符串开始到 索引 i 的子字符串-(NSComparator*)caseInsensitiveCompare:nsstring比较两个字符串大小,忽略大小写-(NSComparator*)compare:nsstring比较两个字符串大小-(BOOL)hasPrefix:nsstring测试字符串是否以 nsstring 开始-(BOOL)hasSuffix:nsstring测试字符串是否以 nsstring 结尾-(BOOL)isEqualToString:nsstring测试两个字符串是否相等-(NSString*)capitalizedString返回字符串,串中的每个单词的首字母大写,其余字母小写-(NSString*)lowercaseString返回转换为小写的字符串-(NSString*)uppercaseString返回转换为大写的字符串-(const char*)UTF8String返回UTF8编码格式的字符串-(double)doubleValue返回转换为double 类型的字符串-(float)floatValue返回转换为 float 类型的字符串-(NSInteger)integerValue返回转换为 NSInteger 类型的新字符串-(int)intvalue返回转换为 int 的字符串NSString 常用方法总结
+(id)stringWithContentsOfFile:path encoding:enc err | 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 | +(id)stringWithContentsOfURL:url encoding:enc err创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误+(id)string创建一个新的空字符串+(id)stringWithString:nsstring创建一个新字符串,将其内容设置为 nsstring 内容-(id)initWithString:nsstring将字符串内容设置为 nsstring 内容-(id)initWithContentsOfFile:path encoding:enc error:err将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误-(id)initWithContentsOfURL:url encoding:enc error:err将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误-(UNSigned int)length返回字符串中字符数目-(unichar)characterAtindex:i返回索引i 所在UniCode 字符-(NSString*)substringFromIndex:i返回从索引 i 开始到结尾的子字符串-(NSString*)substringWithRange:range根据指定范围返回子字符串-(NSString*)substringToIndex:i返回从字符串开始到 索引 i 的子字符串-(NSComparator*)caseInsensitiveCompare:nsstring比较两个字符串大小,忽略大小写-(NSComparator*)compare:nsstring比较两个字符串大小-(BOOL)hasPrefix:nsstring测试字符串是否以 nsstring 开始-(BOOL)hasSuffix:nsstring测试字符串是否以 nsstring 结尾-(BOOL)isEqualToString:nsstring测试两个字符串是否相等-(NSString*)capitalizedString返回字符串,串中的每个单词的首字母大写,其余字母小写-(NSString*)lowercaseString返回转换为小写的字符串-(NSString*)uppercaseString返回转换为大写的字符串-(const char*)UTF8String返回UTF8编码格式的字符串-(double)doubleValue返回转换为double 类型的字符串-(float)floatValue返回转换为 float 类型的字符串-(NSInteger)integerValue返回转换为 NSInteger 类型的新字符串-(int)intvalue返回转换为 int 的字符串NSString 常用方法总结+(id)stringWithContentsOfFile:path encoding:enc err | 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 | +(id)stringWithContentsOfURL:url encoding:enc err创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误+(id)string创建一个新的空字符串+(id)stringWithString:nsstring创建一个新字符串,将其内容设置为 nsstring 内容-(id)initWithString:nsstring将字符串内容设置为 nsstring 内容-(id)initWithContentsOfFile:path encoding:enc error:err将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误-(id)initWithContentsOfURL:url encoding:enc error:err将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误-(UNSigned int)length返回字符串中字符数目-(unichar)characterAtindex:i返回索引i 所在UniCode 字符-(NSString*)substringFromIndex:i返回从索引 i 开始到结尾的子字符串-(NSString*)substringWithRange:range根据指定范围返回子字符串-(NSString*)substringToIndex:i返回从字符串开始到 索引 i 的子字符串-(NSComparator*)caseInsensitiveCompare:nsstring比较两个字符串大小,忽略大小写-(NSComparator*)compare:nsstring比较两个字符串大小-(BOOL)hasPrefix:nsstring测试字符串是否以 nsstring 开始-(BOOL)hasSuffix:nsstring测试字符串是否以 nsstring 结尾-(BOOL)isEqualToString:nsstring测试两个字符串是否相等-(NSString*)capitalizedString返回字符串,串中的每个单词的首字母大写,其余字母小写-(NSString*)lowercaseString返回转换为小写的字符串-(NSString*)uppercaseString返回转换为大写的字符串-(const char*)UTF8String返回UTF8编码格式的字符串-(double)doubleValue返回转换为double 类型的字符串-(float)floatValue返回转换为 float 类型的字符串-(NSInteger)integerValue返回转换为 NSInteger 类型的新字符串-(int)intvalue返回转换为 int 的字符串NSMutableString 可修改字符串常用方法+(id)stringWithCapacity:size创建一个字符串,容量为size大小-(id)initWithCapacity:size初始化一个字符串,容量为size-(void)setString:nsstring将字符串设置为 nsstring-(void)appendString:nsstring在字符串末尾追加字符串 nsstring-(void)deleteCharatersInRange:range删除指定range 中的字符-(void)insertString:nsstring atIndex:i以索引 i 为起始位置插入 nsstring-(void)replaceCharatersInRange;range withString:nsstring使用 nsstring 替换 range 指定的字符-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring 0 0