A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

适合有java 和C基础的同学迅速了解OC

  1. #import <Foundation/Foundation.h>
  2. #include <stdio.h>
  3. /*
  4.         1>利用C生成一个文本文件,后再读取保存为Cstr,
  5.         将Cstr转成OCstr后修改字符串中的内容,再利用OC字符串方法
  6.         将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
  7.         2>利用OC字符串中方法读取网页,并计算网页中内容有多少行
  8. */
  9. int main()
  10. {
  11.         //function declaration
  12.         char * cTextFileOperation(char * path,char *content);
  13.         NSString * ocTextFileOpertaion(NSString * path,
  14.                                         NSString *del,NSString *append,NSString *src);
  15.         int countWebPageLine(NSURL* url);
  16.        
  17.        
  18.         char *fileName="aaa.txt";
  19.         char *cStr=cTextFileOperation(fileName,"1>USE C LAGUAGE TO WRITE TEXT TO FILE OVER\n");
  20.        
  21.         printf("C读取文件内容为:\n%s\n",cStr);
  22.        
  23.         NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
  24.        
  25.         // 将Cstr转换成OCstr
  26.         NSString * ocStr=ocTextFileOpertaion(
  27.         [NSString stringWithUTF8String:fileName],
  28.         @"OVER",@"2>利用NSString方法写入的字符串\n",
  29.         [NSString stringWithUTF8String:cStr]);
  30.                
  31.         NSLog(@"\nNSString方式读取文件内容为:\n%@",ocStr);
  32.        
  33.         // OCstr转换成Cstr
  34.         char *cStr2=[ocStr UTF8String];
  35.         // 若系统编码方式非UTF8,中文讲打印乱码
  36.         printf("NSString方式读取文件内容转成char *后为:\n%s\n",cStr2);
  37.        
  38.         //读取网页内容
  39.         NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
  40.         int line=countWebPageLine(url);
  41.        
  42.         NSLog(@"\n%@页面内容有%d行",url,line);
  43.        
  44.        
  45.         [pool drain];
  46.        
  47.         free(cStr);//malloc分配的内存需要手动回收
  48.         return 0;
  49. }

  50. // 利用OC字符串中方法读取网页,并计算网页中内容有多少行
  51. int countWebPageLine(NSURL* url)
  52. {
  53.         NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
  54.        
  55.          //非使用类方法创建的需要调用autorelease
  56.         //NSString *str=[[[NSString alloc] initWithContentsOfURL:url
  57.         // encoding:NSUTF8StringEncoding error:0] autorelease];
  58.        
  59.         NSString *str=[NSString stringWithContentsOfURL:url
  60.                 encoding:NSUTF8StringEncoding error:0];
  61.          
  62.        
  63.         int count=0,i,len=[str length];
  64.         //unichar为无符号双字节
  65.         unichar uc;
  66.         for(i=0;i<len;i++)
  67.         {       
  68.                 uc=[str characterAtIndex:i];
  69.                 if(uc=='\n')count++;
  70.         }
  71.        
  72.         [pool drain];
  73.         return count;
  74. }


  75. // 修改字符串中的内容,再利用OC字符串方法
  76. //        将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
  77. NSString * ocTextFileOpertaion(NSString * path,
  78.                                         NSString *del,NSString *append,NSString *src)
  79. {
  80.        
  81.         NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
  82.        
  83.         //使用类方法创建的系统类,基本都为autorelease过的
  84.         // 按照src创建一个可变字符串
  85.         NSMutableString *mstr=[NSMutableString stringWithString:src];
  86.        
  87.         // 可变字符串可对字符串进行增删改
  88.         // 获取“结束”在字符串中的位置,以单字节计算,汉子占两字节
  89.         NSRange range=[mstr rangeOfString:del];
  90.         NSLog(@"\nrange=%@",NSStringFromRange(range));
  91.         //删除字符串该位置上的字符串前先判断原字符串中是否有该字符串
  92.         if(range.location!=NSNotFound&&range.length!=0)
  93.                 [mstr deleteCharactersInRange:range];
  94.        
  95.         [mstr appendFormat:append];
  96.         //将新的字符串写入文件
  97.         BOOL b=[mstr writeToFile:path atomically:1
  98.                 encoding:NSUTF8StringEncoding error:0];
  99.         NSLog(@"\n写入文件结果=%d",b);
  100.        
  101.         // 需要返回的OCstr需retain,否则被释放池release后将deallocated
  102.         NSString *str=[[NSString stringWithContentsOfFile:path
  103.           encoding:NSUTF8StringEncoding error:0] retain];
  104.        
  105.         [pool drain];
  106.         // 返回前先调用autorelease,方法外无需再管理
  107.         return [str autorelease];
  108. }


  109. //利用C生成一个文本文件,后再读取保存为Cstr
  110. char * cTextFileOperation(char * path,char *content)
  111. {
  112.         FILE *fp;
  113.         if((fp=fopen(path,"w+"))==0)
  114.         {
  115.                 printf("打开文件失败\n");
  116.                 getchar();
  117.                 exit(1);
  118.         }
  119.         fprintf(fp,content);
  120.         fseek(fp,0,0);//文件读取指针移至文件开始位置
  121.         //函数中定义需要返回的数组,使用malloc创建,
  122.         //否则函数结束后,数组所在内存将被回收
  123.         //char buf[200];
  124.         char * buf=(char *)malloc(200);
  125.         int ind=0;
  126.         char c;
  127.         while((c=fgetc(fp))!=-1)
  128.                 buf[ind++]=c;
  129.         buf[ind]=0;
  130.        
  131.         fclose(fp);
  132.         return buf;
  133.        
  134. }
复制代码



概括:
        NSString为不可变字符串,即无法进行增删改操作,其子类NSMutableString为可变

NSString 常用方法:
        常用的创建方法:
                注:为方便类的创建,OC中系统自带类的构造方法大都会有一个与之对应的类方法,
                        非ARC机制下,一般返回autorelease过的对象,
                        该类方法的命名规范为将init替换为类名去前缀;
        // 按格式创建
        -(id)initWithFormat:(NSString *)format ...;
        +(id)stringWithFormat:(NSString *)format ...;
                // 将传入的OCstr转换为另一个OCstr,一般用与将NSString转换为NSMutableString
        -(id)initWithString:(NSString *)str;
        +(id)stringWithString:(NSString *)str;
                //将Cstr转成OCstr字符串
        -(id)initWithUTF8String:(char *) cstr;
        +(id)stringWithUTF8String:(char *)cstr;
                //从文件中读取内容保存为OCstr
        -(id)initWithContentsOfFile:(NSString *)path
                                encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
        +(id)stringWithContentsOfFile:(NSString *)path
                                encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
                //从URL中读取内容保存为OCstr
        -(id)initWithContentsOfURL:(NSURL *) url
                                encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
        +(id)stringWithContentsOfURL:(NSURL *) url
                                encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;

//将OCstr转换成Cstr
- (char *)UTF8String;
// 找出subStr在字符串中的位置,没找到返回NSRange中
//location=NSNotFound(即-1),length=0
-(NSRange)rangeOfString:(NSString *)subStr;
//将OCstr写到文件,atomically表示写入过程出问题是否撤销已经写入的内容
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)b
                        encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
//将OCstr写到URL
-(BOOL)writeToURL:(NSURL *)url atomically:(BOOL)b
                        encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
// 在一字符串末尾拼接字符串,返回拼接后的新字符串,原字符串不变
-(NSString *)stringByAppendingString:(NSString *)append;
        //返回字符串中字符数
-(unsigned int)length ;
        //返回字符串中下标为i的Unicode字符 (unichar 为无符号两字节)
-(unichar) characterAtIndex:i;
        // 截取从字符串下标i开始到字符串结束的新字符串后返回
-(NSString *)substringFromIndex:i;
        //  截取从字符串开始位置到下标i位置的新字符串后返回
-(NSString *)substringToIndex:i;


NSMutableString 常用方法:
// 在字符串末尾拼接字符串,原字符扩展为拼接后的字符串
- (void)appendString:(NSString *)append;
// 在字符串末尾拼接格式字符串
-(void)appendFormat:(NSString *)format ...;
// 删除字符串中某范围的字符串
-(void)deleteCharactersInRange:(NSRange)range;



编码方式枚举:NSStringEncoding
typedef enum _NSStringEncoding{
        ..,NSUTF8StringEncoding,.......
} NSStringEncoding;


URL:
        格式:
                        协议头://路径
        例:
                本地文件  file://path
                ftp文件   ftp://path
                网络文件  http://path
创建方法:
NSURL *url1=[[NSURL alloc] initWithString:@"file:///home/XX"];
NSURL *url2=[NSURL URLWithString:@"file:///home/XX"];


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马