#import <Foundation/Foundation.h>
#include <stdio.h>
/*
1>利用C生成一个文本文件,后再读取保存为Cstr,
将Cstr转成OCstr后修改字符串中的内容,再利用OC字符串方法
将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
2>利用OC字符串中方法读取网页,并计算网页中内容有多少行
*/
int main()
{
//function declaration
char * cTextFileOperation(char * path,char *content);
NSString * ocTextFileOpertaion(NSString * path,
NSString *del,NSString *append,NSString *src);
int countWebPageLine(NSURL* url);
char *fileName="aaa.txt";
char *cStr=cTextFileOperation(fileName,"1>USE C LAGUAGE TO WRITE TEXT TO FILE OVER\n");
printf("C读取文件内容为:\n%s\n",cStr);
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
// 将Cstr转换成OCstr
NSString * ocStr=ocTextFileOpertaion(
[NSString stringWithUTF8String:fileName],
@"OVER",@"2>利用NSString方法写入的字符串\n",
[NSString stringWithUTF8String:cStr]);
NSLog(@"\nNSString方式读取文件内容为:\n%@",ocStr);
// OCstr转换成Cstr
char *cStr2=[ocStr UTF8String];
// 若系统编码方式非UTF8,中文讲打印乱码
printf("NSString方式读取文件内容转成char *后为:\n%s\n",cStr2);
//读取网页内容
NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
int line=countWebPageLine(url);
NSLog(@"\n%@页面内容有%d行",url,line);
[pool drain];
free(cStr);//malloc分配的内存需要手动回收
return 0;
}
// 利用OC字符串中方法读取网页,并计算网页中内容有多少行
int countWebPageLine(NSURL* url)
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
//非使用类方法创建的需要调用autorelease
//NSString *str=[[[NSString alloc] initWithContentsOfURL:url
// encoding:NSUTF8StringEncoding error:0] autorelease];
NSString *str=[NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding error:0];
int count=0,i,len=[str length];
//unichar为无符号双字节
unichar uc;
for(i=0;i<len;i++)
{
uc=[str characterAtIndex:i];
if(uc=='\n')count++;
}
[pool drain];
return count;
}
// 修改字符串中的内容,再利用OC字符串方法
// 将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
NSString * ocTextFileOpertaion(NSString * path,
NSString *del,NSString *append,NSString *src)
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
//使用类方法创建的系统类,基本都为autorelease过的
// 按照src创建一个可变字符串
NSMutableString *mstr=[NSMutableString stringWithString:src];
// 可变字符串可对字符串进行增删改
// 获取“结束”在字符串中的位置,以单字节计算,汉子占两字节
NSRange range=[mstr rangeOfString:del];
NSLog(@"\nrange=%@",NSStringFromRange(range));
//删除字符串该位置上的字符串前先判断原字符串中是否有该字符串
if(range.location!=NSNotFound&&range.length!=0)
[mstr deleteCharactersInRange:range];
[mstr appendFormat:append];
//将新的字符串写入文件
BOOL b=[mstr writeToFile:path atomically:1
encoding:NSUTF8StringEncoding error:0];
NSLog(@"\n写入文件结果=%d",b);
// 需要返回的OCstr需retain,否则被释放池release后将deallocated
NSString *str=[[NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding error:0] retain];
[pool drain];
// 返回前先调用autorelease,方法外无需再管理
return [str autorelease];
}
//利用C生成一个文本文件,后再读取保存为Cstr
char * cTextFileOperation(char * path,char *content)
{
FILE *fp;
if((fp=fopen(path,"w+"))==0)
{
printf("打开文件失败\n");
getchar();
exit(1);
}
fprintf(fp,content);
fseek(fp,0,0);//文件读取指针移至文件开始位置
//函数中定义需要返回的数组,使用malloc创建,
//否则函数结束后,数组所在内存将被回收
//char buf[200];
char * buf=(char *)malloc(200);
int ind=0;
char c;
while((c=fgetc(fp))!=-1)
buf[ind++]=c;
buf[ind]=0;
fclose(fp);
return buf;
}
概括:
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"];