OC学习笔记14--Foundation之NSString与NSMutableString常用方法

#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"];




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值