关于iPhone-截断NSString
有一个NSString包含名字。我想要截断空格后面的字符,除了第一个字符外。
比如@"David Campbell"
截为:@"David C"
删除所有的姓:
NSString *str = @"David Campbell";
NSRange range = [str rangeOfString:@" " options:NSBackwardsSearch];
NSString *str2 = [str substringToIndex:range.location];
Debug栏打印时自动把Unicode编码转化成汉字
Debug栏打印时自动把Unicode编码转化成汉字我们在打印调试时候经常会遇到这种,然后看不懂的一些文字。我们可以通过加入一段代码去转码Snip20160823_1.png转码之后的效果图Snip20160823_3.png直接上代码#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"{\n"];
// 遍历字典的所有键值对
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[str appendFormat:@"\t%@ = %@,\n", key, obj];
}];
[str appendString:@"}"];
// 查出最后一个,的范围
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
if (range.length != 0) {
// 删掉最后一个,
[str deleteCharactersInRange:range];
}
return str;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"[\n"];
// 遍历数组的所有元素
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[str appendFormat:@"%@,\n", obj];
}];
[str appendString:@"]"];
// 查出最后一个,的范围
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
if (range.length != 0) {
// 删掉最后一个,
[str deleteCharactersInRange:range];
}
return str;
}
@end将自己写好的这段代码拖入到你的项目里面,就可以实现上面的效果当然我们也可以利用第三方插件// 有时候我们在xcode中打印中文,会打印出Unicode编码,还需要自己去一些在线网站转换,有了插件就方便多了。
DXXcodeConsoleUnicodePlugin 插件
iOS开发之网络数据解析--中文输出
对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果:
为了避免这个问题,可以通过类别来重写系统和打印相关的方法。
步骤:
1、新建文件名:Foundation+Log的.m后缀的这一个文件,你没看错,就这个.m文件,不需要.h声明文件
2、然后把以下源码全部拷贝进去即可:
//
// NSDictionary+Log.m
// 01-掌握-多值参数和中文输出
//
#import <Foundation/Foundation.h>
// 重写系统的打印方法,
// 需要知道的是NSDictionary和NSArray各自都有打印方法
// 也就是说,你重写了NSArray打印重写方法,打印NSArray对象才会执行重写的方法
// 如果是通过子类来重写父类系统的方法,那么使用的时候就需要导入这个子类
// 但是通过类别重写系统方法,就不需要import导入,因为系统中导入了已经有了同名的被重写的方法了,系统会优先加载类别里的重写的方法,连.h声明文件都可以不用了,因为系统中已经有.h声明文件
@implementation NSDictionary (Log)
//控制输出:对字典或者是数组进行排版
-(NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];
//设置开始
[string appendString:@"{\n"];
//设置key-value
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[string appendFormat:@"%@:",key];
[string appendFormat:@"%@,\n",obj];
}];
//设置结尾
[string appendString:@"}"];
//删除最后的逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
/*
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *string = [NSMutableString string];
//设置开始
[string appendString:@"{"];
//设置key-value
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[string appendFormat:@"%@:",key];
[string appendFormat:@"%@",obj];
}];
//设置结尾
[string appendString:@"}"];
return string;
}
*/
@end
@implementation NSArray (Log)
//控制输出:对字典或者是数组进行排版
-(NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];
//设置开始
[string appendString:@"["];
//设置key-value
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[string appendFormat:@"%@,",obj];
}];
//设置结尾
[string appendString:@"]"];
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
@end
相关源码百度云分享链接: http://pan.baidu.com/s/1jGUWkrc 密码: 9yq6
Javascript与Objective-C 字符串与数组的方法类比
String vs NSString
JavaScript string Obj-C NSString
charAt(index) (see text)
charCodeAt(index) - (unichar)characterAtIndex:(NSUInteger)index
concat(string) - (NSString *)stringByAppendingString:(NSString *)aString
indexOf(string) - (NSRange)rangeOfString:(NSString *)aString
lastIndexOf(string) - (NSRange)rangeOfString:(NSString *)aString options:NSBackwardsSearch
localeCompare(string) - (NSComparisonResult)localizedCompare:(NSString *)aString
split(delimiter) - (NSArray *)componentsSeparatedByString:(NSString *)separator
substring(startIndex) - (NSString *)substringWithRange:(NSRange)aRange
toLowerCase() - (NSString *)lowercaseString
toUpperCase() - (NSString *)uppercaseString
Array vs NSArray
JavaScript Array Obj-C NSArray
length - (NSUInteger)count
concat(item1[, item2...]) - (NSArray *)arrayByAddingObject:(id)anObject -(NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray
join(delimiter) - (NSString *)componentsJoinedByString:(NSString *)separator
sort() - (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
toString() - (NSString *)description
摘自:Learning the iOS 4 SDK for JavaScript Programmers PDF下载>>
iOS中 加强日志输出 开发技术总结
对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额。而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退。一遍一遍的用XCode取应用崩溃记录、解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测。
对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。
导入第三方:AFNetWorkinng
- (void)viewDidLoad
{
[super viewDidLoad];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
}];
}
给其写一个类目:Foundation+Log.m
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
//+ (void)load
//{
// NSLog(@"11");
//}
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[str appendFormat:@"\t%@ = %@, \n", key, obj];
}];
[str appendString:@"}"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"[\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[str appendFormat:@"\t\t%@,\n", obj];
}];
[str appendString:@"]"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}@end
最终效果:
小技巧:iOS - 将控制台Log日志转为输出为文本文件
1.在AppDelegate.m中创建函数实现以下代码块:
- (void)redirectNSlogToDocumentFolder
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"MrNSLog.txt"];// 注意不是NSData!
NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
// 先删除已经存在的文件
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logFilePath error:nil];
// 将log输入到文件
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
2.在didFinishLaunchingWithOptions中调用 :
[self redirectNSlogToDocumentFolder];
最后配置共享文件夹:
在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的 Documents目录。一旦设备插入到用户计算机,iTunes9.1就会在选中设备的Apps标签中显示一个File
Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。
每日更新关注:http://weibo.com/hanjunqiang
新浪微博<pheiti sc="" light'"="">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head><meta http-equiv="Cont
对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额。而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退。一遍一遍的用XCode取应用崩溃记录、解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测。
对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。
导入第三方:AFNetWorkinng
- (void)viewDidLoad
{
[super viewDidLoad];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
}];
}
给其写一个类目:Foundation+Log.m
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
//+ (void)load
//{
// NSLog(@"11");
//}
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[str appendFormat:@"\t%@ = %@, \n", key, obj];
}];
[str appendString:@"}"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"[\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[str appendFormat:@"\t\t%@,\n", obj];
}];
[str appendString:@"]"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}@end
最终效果:
小技巧:iOS - 将控制台Log日志转为输出为文本文件
1.在AppDelegate.m中创建函数实现以下代码块:
- (void)redirectNSlogToDocumentFolder
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"MrNSLog.txt"];// 注意不是NSData!
NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
// 先删除已经存在的文件
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logFilePath error:nil];
// 将log输入到文件
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
2.在didFinishLaunchingWithOptions中调用 :
[self redirectNSlogToDocumentFolder];
最后配置共享文件夹:
在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的 Documents目录。一旦设备插入到用户计算机,iTunes9.1就会在选中设备的Apps标签中显示一个File
Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。
每日更新关注:http://weibo.com/hanjunqiang
新浪微博<pheiti sc="" light'"="">
iOS中 加强日志输出 开发技术总结
版权声明:本文为博主原创文章,未经博主允许不得转载。
对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额。而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退。一遍一遍的用XCode取应用崩溃记录、解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测。
对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。
导入第三方:AFNetWorkinng
[objc] view plain copy
- (void)viewDidLoad
{
[super viewDidLoad];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
}];
}
给其写一个类目:Foundation+Log.m
[objc] view plain copy
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
//+ (void)load
//{
// NSLog(@"11");
//}
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOLBOOL *stop) {
[str appendFormat:@"\t%@ = %@, \n", key, obj];
}];
[str appendString:@"}"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *str = [NSMutableString string];
[str appendString:@"[\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {
[str appendFormat:@"\t\t%@,\n", obj];
}];
[str appendString:@"]"];
// 删除最后一个,
NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];
[str deleteCharactersInRange:range];
return str;
}@end
最终效果:
小技巧:iOS - 将控制台Log日志转为输出为文本文件
[plain] view plain copy
1.在AppDelegate.m中创建函数实现以下代码块:
- (void)redirectNSlogToDocumentFolder
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"MrNSLog.txt"];// 注意不是NSData!
NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
// 先删除已经存在的文件
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logFilePath error:nil];
// 将log输入到文件
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
2.在didFinishLaunchingWithOptions中调用 :
[self redirectNSlogToDocumentFolder];
最后配置共享文件夹:
在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的 Documents目录。一旦设备插入到用户计算机,iTunes9.1就会在选中设备的Apps标签中显示一个File Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。
每日更新关注:http://weibo.com/hanjunqiang 新浪微博<pheiti sc="" light'"="">
原文地址:http://blog.csdn.net/qq_31810357/article/details/50155677
obj-c编程10:Foundation库中类的使用(1)[数字,字符串]
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj-c编译器,但是平台开发框架还是在mac上啊.比如cocoa框架包括Foundation框架,Application Kit框架和Core Data的第三方框架;二cocoa Touch指的则是Foundation,Core Data以及UIKit框架.对于Foundation框架中各个类的使用,可以到apple开发者网站在线查询:https://developer.apple.com/library/mac/navigation/
接下来我们不按顺序,专挑难点,奇怪点和好玩点(如果有的话)的类来看看,直接用代码说话喽
#import<Foundation/Foundation.h>
int main(int argc, char *argv[]){
@autoreleasepool {
NSNumber *n;
NSInteger integer; //not a class just a typedef
n = [NSNumber numberWithInteger: 101];
integer = [n integerValue];
NSLog(@"%li",(long)integer);
NSNumber *n1 = [[NSNumber alloc] initWithLong:0x12345678];
[n1 initWithLong :0xabcd]; //can't change org value 0x12345678!
integer = [n1 longValue];
NSLog(@"%lx",(long)integer);
NSString *str = @"hello apple";
NSLog(@"str is : %@",str);
NSLog(@"num is : %@",n);
NSLog(@"Hello World!");
}
return 0;
}
注意代码中%@打印NSNumber型变量的行了吗?有人可能会问这是怎么实现的,我开始也以为%@只能格式化显示NSString类型啊.其实只要类中定义了description方法,就可以以自定义格式显示任何对象的内容啦.这个我们来写个简单类试一下:
#import<Foundation/Foundation.h>
@interface A:NSObject{
int i;
}
-(id)init:(int)i_v;
@end
@implementation A
-(id)init:(int)i_v{
self = [super init];
if(self){
i = i_v;
}
return self;
}
-(NSString*)description{
return [NSString stringWithFormat:@"#i is %d#",i];
}
@end
int main(int argc, char *argv[]){
@autoreleasepool {
A *a = [[A alloc] init:99];
NSLog(@"a is %@",a);
}
return 0;
}
注意description方法的实现中stringWithFormat方法的2个参数分割符哦,不是:号而是逗号(,)哦.执行结果如下
wisy@wisy-ThinkPad-X61:~/src/objc_src$ clang -O3 -g0 $OBJ_C_OPT -lobjc -lgnustep-base -o f f.m
wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f
2014-07-01 12:42:59.380 f[4179] a is #i is 99#
Foundation中的字符串操作看起就显得那么蛋疼,简单的东西给搞的蛮复杂的,尤其是方法名,貌似还驼峰状,我呵呵了.字符串类分为可变和不可变两种,前者类位NSString,后者类为NSMutableString.顾名思义,不可变字符串不可以修改自身,只能返回一个修改后的新字符串,而可变字符串可以修改自身,包括删除subString,拼接啊,替换啊,皆可,下面上代码:
#import<Foundation/Foundation.h>
int main(int argc, char *argv[]){
@autoreleasepool {
NSString *str_no_m = @"hello world";
NSMutableString *str_m;
NSRange substr; //just a struct
str_m = [NSMutableString stringWithString: str_no_m];
NSLog(@"%@",str_m);
[str_m insertString: @" xxx" atIndex: 5];
NSLog(@"%@",str_m);
[str_m appendString: @" not_fix!"];
NSLog(@"%@",str_m);
[str_m deleteCharactersInRange: NSMakeRange(6,4)]; //(index,len)
NSLog(@"%@",str_m);
substr = NSMakeRange(6,6);
[str_m deleteCharactersInRange: substr];
NSLog(@"%@",str_m);
substr = [str_m rangeOfString: @"_"];
if(substr.location != NSNotFound){
[str_m deleteCharactersInRange: substr];
}
NSLog(@"%@",str_m);
[str_m setString: @"new string!"];
NSLog(@"%@",str_m);
substr = [str_m rangeOfString: @"new"];
if(substr.location != NSNotFound){
[str_m replaceCharactersInRange: substr withString: @"old"];
}
NSLog(@"%@",str_m);
[str_m setString: @"1122334411223344"];
[str_m replaceOccurrencesOfString:@"2" withString:@"X" \
options:0 range:NSMakeRange(0,[str_m length])];
NSLog(@"%@",str_m);
}
return 0;
}
编译及运行结果如下:
wisy@wisy-ThinkPad-X61:~/src/objc_src$ clang -O3 -g0 $OBJ_C_OPT -lobjc -lgnustep-base -o f f.m
wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f
2014-07-01 14:36:49.380 f[5719] hello world
2014-07-01 14:36:49.382 f[5719] hello xxx world
2014-07-01 14:36:49.382 f[5719] hello xxx world not_fix!
2014-07-01 14:36:49.383 f[5719] hello world not_fix!
2014-07-01 14:36:49.383 f[5719] hello not_fix!
2014-07-01 14:36:49.383 f[5719] hello notfix!
2014-07-01 14:36:49.383 f[5719] new string!
2014-07-01 14:36:49.383 f[5719] old string!
2014-07-01 14:36:49.383 f[5719] 11XX334411XX3344
注意其中的replaceOccurrencesOfString方法,其中的options可能的选项有:
Search and Comparison Options
Several of the search and comparison methods take an “options” argument. This is a bit mask that adds further constraints to the operation. You create the mask by combining the following options (not all options are available for every method):
Search option
Effect
NSCaseInsensitiveSearch
Ignores case distinctions among characters.
NSLiteralSearch
Performs a byte-for-byte comparison. Differing literal sequences (such as composed character sequences) that would otherwise be considered equivalent are considered not to match. Using this option can speed some operations dramatically.
NSBackwardsSearch
Performs searching from the end of the range toward the beginning.
NSAnchoredSearch
Performs searching only on characters at the beginning or, if NSBackwardsSearch is also specified, the end of the range. No match at the beginning or end means nothing is found, even if a matching sequence of characters occurs elsewhere in the
string.
NSNumericSearch
When used with the compare:options: methods, groups of numbers are treated as a numeric value for the purpose of comparison. For example,Filename9.txt
< Filename20.txt < Filename100.txt.
Search and comparison are currently performed as if the NSLiteralSearch
option were specified.
至于我用的值0,我猜是默认选项吧?因为书上值为nil,编译有警告,遂换为0.
oc68--NSString
//
// main.m
// 字符串截取
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSString *str = @"<head>小码哥</head>";
/*
// NSRange : 位置/长度
// NSRange range = {6, 3};
// NSRange range;
// range.location = 6;
// range.length = 3;
// 只要是OC提供的结构体, 一般都可以使用NSMakeXXX来创建
// NSRange range = NSMakeRange(6, 3);
*/
// 1.动态获取截取的起始位置
NSUInteger location = [str rangeOfString:@">"].location + 1;
// 2.动态获取截取的长度
// 注意:rangeOfString是从左至右的开始查找, 只要找到就不找了
// NSUInteger length = [str rangeOfString:@"<" options:NSBackwardsSearch].location - location; 从后向前找,
NSUInteger length = [str rangeOfString:@"</"].location - location;
NSLog(@"location = %lu, length = %lu", location, length);
NSRange range = NSMakeRange(location, length);
NSString *newStr = [str substringWithRange:range];
NSLog(@"str = %@", str);
NSLog(@"newStr = %@", newStr);
NSString *temp = @"abcdefa";
NSRange range =[temp rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"%lu", range.location);
// 从什么地方开始截取, 一直截取到最后
NSString *newStr = [str substringFromIndex:6];
NSLog(@"newStr = %@", newStr);
// 从开头开始截取, 一直截取到什么位置
NSString *newStr = [str substringToIndex:6];
NSLog(@"newStr = %@", newStr);
/*
<head>小码哥</head> --> 小码哥</head> --> 小码哥
<head>小码哥</head> --> <head>小码哥 --> 小码哥
*/
NSLog(@"str = %@", str);
NSUInteger location = [str rangeOfString:@">"].location + 1;
NSString *newStr = [str substringFromIndex:location];
NSLog(@"newStr = %@", newStr);
location = [newStr rangeOfString:@"</"].location;
// 改变了指针的指向, 并不是修改了原来的字符串
newStr = [newStr substringToIndex:location];
NSLog(@"newStr = %@", newStr);
return 0;
}
//
// main.m
// 字符串替换
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
/*
// 需求: 将&符号替换为/
NSString *str = @"http:&&www.520it.com&img&lnj.gif";
// OccurrencesOfString: 要替换谁
// withString: 用谁替换
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"&" withString:@"/"];
NSLog(@"newStr = %@", newStr);
// 1.去除空格 2.将&替换为/
NSString *str = @" http: &&www. 520it.com &img&lnj.gif ";
// 1.去除空格
NSString *newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"newStr = |%@|", newStr);
NSString *newStr2 = [newStr stringByReplacingOccurrencesOfString:@"&" withString:@"/"];
NSLog(@"newStr2 = |%@|", newStr2); */
// 3.替换首尾
NSString *str1 = @" http:&&www.520it.com&img&lnj.gif ";
NSString *str = @"HTTP://www.520it.com/img/LNJ.GIF";
NSCharacterSet *set1 = [NSCharacterSet whitespaceCharacterSet];
NSString *newStr1 = [str stringByTrimmingCharactersInSet:set1];
NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];
NSString *newStr = [str stringByTrimmingCharactersInSet:set]; //首尾大小写去掉了
NSLog(@"newStr = |%@|", newStr);
return 0;
}
//
// main.m
// 字符串与路径
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSString *str = @"User/lnj/Desktop/lnj.txt.jpg";
// 1.判断是否是绝对路径
// 其实本质就是判断字符串是否以/开头
if([str isAbsolutePath]) //no
{
NSLog(@"是绝对路径");
}else{
NSLog(@"不是绝对路径");
}
// 2.获取文件路径中的最后一个目录
// 本质就是获取路径中最后一个/后面的内容
NSString *newStr = [str lastPathComponent];
NSLog(@"%@", newStr); //lnj.txt.jpg
// 3.删除文件路径中的最后一个目录
// 本质就是删除最后一个/后面的内容, 包括/也会被删除
NSString *newStr1 = [str stringByDeletingLastPathComponent];
NSLog(@"%@", newStr1); //User/lnj/Desktop
// 4.给文件路径添加一个目录
// 本质就是在字符串的末尾加上一个/ 和指定的内容
// 注意: 如果路径后面已经有了/, 那么就不会添加了
// 如果路径后面有多个/, 那么会自动删除多余的/, 只保留一个
NSString *newStr2 = [str stringByAppendingPathComponent:@"xmg"];
NSLog(@"%@", newStr2); //User/lnj/Desktop/lnj.txt.jpg/xmg
// 5.获取路径中文件的扩展名
// 本质就是从字符串的末尾开始查找., 截取第一个.后面的内容
NSString *newStr3 = [str pathExtension];
NSLog(@"%@", newStr3); //jpg
// 6.删除路径中文件的扩展名
// 本质就是从字符串的末尾开始查找.,删除第一个.和.后面的内容
NSString *newStr4 = [str stringByDeletingPathExtension];
NSLog(@"%@", newStr4); //User/lnj/Desktop/lnj.txt
// 7.给文件路径添加一个扩展名
// 本质就是在字符串的末尾加上一个.和指定的内容
NSString *newStr5 = [str stringByAppendingPathExtension:@"jpg"];
NSLog(@"%@", newStr5); //User/lnj/Desktop/lnj.txt.jpg.jpg
return 0;
}
//
// main.m
// 字符串的转换
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
// NSString *str = @"abc";
// 1.将字符串转换为大写
NSString *newStr = [str uppercaseString];
NSLog(@"%@", newStr);
// 2.将字符串转换为小写
NSString *newStr2 = [newStr lowercaseString];
NSLog(@"%@", newStr2);
// htpp://www.520it.com/img/lnj.GIF;
// 3.将字符串的首字符转换为大写
NSString *newStr = [str capitalizedString];
NSLog(@"%@", newStr);
// 4.字符串与基本数据类型的转换
NSString *str1 = @"110";
NSString *str2 = @"120";
// str1 + str2; // 错误
int value1 = [str1 intValue];
int value2 = [str2 intValue];
NSLog(@"sum = %i", value1 + value2);
// 注意: 如果不是int,double,float,bool,integer,longlong这些类型就不要乱用
NSString *str3 = @"abc";
int value3 = [str3 intValue];
NSLog(@"value3 = %i", value3);
// 5.C语言字符串和OC字符串之间的转换
char *cStr = "lnj";
NSString *str = [NSString stringWithUTF8String:cStr];
NSLog(@"str = %@", str);
NSString *newStr = @"lmj";
const char *cStr2 = [newStr UTF8String];
NSLog(@"cStr2 = %s", cStr2);
return 0;
}
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7440344.html,如需转载请自行联系原作者
NSRange各种初始化方法
#import <Foundation/Foundation.h>
void print_range(NSRange range);
void print_range(NSRange range)
{
if(range.location != NSNotFound)
NSLog(@"range is %@", NSStringFromRange(range)); // NSStringFromRange
else
NSLog(@"range.location not found.");
}
int main (int argc, const char * argv[])
{
@autoreleasepool
{
// 各种初始化方法
NSRange range1;
// 分别赋值
range1.location = 18;
range1.length = 20;
print_range(range1);
// 结构初始化方法
NSRange range2 = {20, 40};
print_range(range2);
// 调用辅助的build函数
NSRange range3 = NSMakeRange(30, 60);
print_range(range3);
// 暂时没有确定的有意义的值,可以设置成NSNotFound
NSRange range4 = {NSNotFound, NSNotFound};
print_range(range4);
// 截取部分字符串
NSString *str = @"that is a dog.";
NSLog(@"it's a %@", [str substringWithRange:NSMakeRange(10, 3)]);
// 返回部分字符串的位置信息
NSRange range = [str rangeOfString:@"dog"];
if(range.length > 0) print_range(range);
// 反响查找
range = [str rangeOfString:@"a" options:NSBackwardsSearch];
if(range.length > 0) print_range(range);
// 从字符串构建NSRange结构体
NSLog(@"it's a %@", [str substringWithRange:NSRangeFromString(@"{10, 3}")]); // NSRangeFromString
// 截取数组的部分元素
NSArray *words = [NSArray arrayWithObjects:@"one", @"two", @"three", @"four", @"five", nil];
NSArray *subWords = [words subarrayWithRange:NSMakeRange(2, 2)];
for (NSString *w in subWords)
NSLog(@"%@", w);
// 判断值是否相等
NSRange rangeOne = NSMakeRange(1, 10);
NSRange rangeTwo = NSMakeRange(1, 10);
if(NSEqualRanges(rangeOne, rangeTwo))
NSLog(@"rangeOne is equal to rangeTwo");
// range is {3, 3}
NSRange intersectionRange = NSIntersectionRange(NSMakeRange(1, 5), NSMakeRange(3, 8));
print_range(intersectionRange);
if(NSLocationInRange(8, NSMakeRange(5, 20)))
NSLog(@"8 in {1, 20}");
if(NSMaxRange(NSMakeRange(3, 8)) == (3 + 8))
NSLog(@"NSMaxRange is sum of location and length");
// range is {1, 14}
print_range(NSUnionRange(NSMakeRange(1, 10), NSMakeRange(5, 10)));
// range is {1, 20}
print_range(NSUnionRange(NSMakeRange(1, 10), NSMakeRange(11, 10)));
}
return 0;
}