Objective-C 中核心處理字符串的類是 NSString 與 NSMutableString 朽缴,這兩個類最大的區(qū)別就是NSString 創(chuàng)建賦值以后該字符串的內(nèi)容與長度不能在動態(tài)的更改,除非重新給這個字符串賦值水援。而NSMutableString 創(chuàng)建賦值以后可以動態(tài)在該字符串上更改內(nèi)容與長度密强。
```
1.創(chuàng)建NSString字符串
NSString 與 char* 最大的區(qū)別就是 NSString是一個objective對象,而char* 是一個字節(jié)數(shù)組。@+" 字符串 " 這個符號為objective-c NSString 字符串常量的標(biāo)準(zhǔn)用法蜗元,char* 創(chuàng)建的時候 無需添加@
- (void)viewDidLoad
{
[super viewDidLoad];
//經(jīng)典的字符串賦值
NSString *str0 = @"my name is justcoding !";
//字符串格式化合并分別包括
//NSString*類型 int類型 char*類型
NSString *str1 = [NSString stringWithFormat:@"我的名字:%@ 我的年齡:%d 我的郵箱:%s",@"justcoding", 25,"justcoding@gmail.com"];
//字符串賦值 參數(shù)中只可以寫一個字符串 和第一種很像
NSString *str2 = [NSString stringWithString:@"我是字符串"];
//字符串轉(zhuǎn)換為utf-8格式 參數(shù)為char*類型
NSString *str3 = [NSString stringWithUTF8String:"字符串轉(zhuǎn)換utf-8格式"];
//字符串合并
int i? = 100;
char*c = "xuanyusong";
NSString *temp = @"我是臨時字符串";
//在字符串temp的基礎(chǔ)繼續(xù)添加 int i 與 char* c 組成一個新的字符串
NSString *str4 = [temp stringByAppendingFormat:@"整型: %d 字符型 :%s",i,c];
//在字符串temp的基礎(chǔ)繼續(xù)添加temp 并組成一個新的字符串
NSString *str5 = [temp stringByAppendingString:temp];
//字符串輸出
NSLog(@"str0 = %@", str0);
NSLog(@"str1 = %@", str1);
NSLog(@"str2 = %@", str2);
NSLog(@"str3 = %@", str3);
NSLog(@"str4 = %@", str4);
NSLog(@"str5 = %@", str5);
}
2.字符串的遍歷
每一個字符串其實是由若干個char字符組成或渤,字符串的遍歷實際上就是將字符串中的每一個字符提取出來。
- (void)viewDidLoad
{
[super viewDidLoad];
//經(jīng)典的字符串賦值
NSString *str = @"YUSONGMOMO";
//字符串的長度
int count = [str length];
NSLog(@"字符串的長度是%d",count);
//遍歷字符串中的每一個字符
for(int i =0; i < count; i++)
{
char c = [str characterAtIndex:i];
NSLog(@"字符串第 %d 位為 %c",i,c);
}
}
3.字符串的比較
isEqualToString 比較字符串是否完全相等奕扣,大小寫不一樣也無法完全匹配薪鹦。
hasPrefixe 匹配字符串頭
haSuffix? ? 匹配字符串的尾巴
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *str0 = @"justcoding";
NSString *str1 = @"justcoding";
//字符串完全相等比較
if([str0 isEqualToString:str1])
{
NSLog(@"字符串完全相等");
}
//字符串以開頭比較
if([str0 hasPrefix:@"just"])
{
NSLog(@"字符串str0以just開頭");
}
//字符串以結(jié)尾比較
if([str1 hasSuffix:@"coding"])
{
NSLog(@"str1字符串以coding結(jié)尾");
}
}
對比字符串//isEqualToString方法
NSString *astring01 = @"This is a String!";
NSString *astring02 = @"This is a String!";
BOOL result = [astring01 isEqualToString:astring02];
NSLog(@"result:%d",result);
//compare方法(comparer返回的三種值)
NSString *astring01 = @"This is a String!";
NSString *astring02 = @"This is a String!";
BOOL result = [astring01 compare:astring02] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSOrderedSame 判斷兩者內(nèi)容是否相同
NSString *astring01 = @"this is a String!";
NSString *astring02 = @"This is a String!";
BOOL result = [astring01 compare:astring02] = = NSOrderedDescending;
NSLog(@"result:%d",result);
//NSOrderedDescending 判斷兩對象值的大小(按字母順序進(jìn)行比較,astring02小于astring01為真)
//不考慮大 小寫比較字符串1
NSString *astring01 = @"this is a String!";
NSString *astring02 = @"This is a String!";
BOOL result = [astring01 caseInsensitiveCompare:astring02] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSOrderedDescending判斷兩對象值的大小(按字母順序進(jìn)行比較惯豆,astring02小于astring01為 真)
//不考慮大小寫比較字符串2
NSString *astring01 = @"this is a String!";
NSString *astring02 = @"This is a String!";
BOOL result = [astring01 compare:astring02 options:NSCaseInsensitiveSearch | NSNumericSearch] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSCaseInsensitiveSearch:不區(qū)分大小寫比較 NSLiteralSearch:進(jìn)行完全比較池磁,區(qū)分大小寫 NSNumericSearch:比較字符串的字符個數(shù),而不是字符值循帐。
文件字符串操作(讀寫)
C代碼? 收藏代碼
//從文件讀取字符串:initWithContentsOfFile方法
NSString *path = @"astring.text";
NSString *astring = [[NSString alloc] initWithContentsOfFile:path];
NSLog(@"astring:%@",astring);
[astring release]; //astring=nil;
C代碼? 收藏代碼
//寫字符串到文件:writeToFile方法
NSString *astring = [[NSString alloc] initWithString:@"This is a String!"];
NSLog(@"astring:%@",astring);
NSString *path = @"astring.text";
[astring writeToFile: path atomically: YES];
[astring release];? //astring=nil;
* ios5 不支持release iOS應(yīng)用開發(fā):什么是ARC框仔?
C代碼? 收藏代碼
//擴(kuò)展路徑
NSString *Path = @"~/NSData.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]);
C代碼? 收藏代碼
//文件擴(kuò)展名
NSString *Path = @"~/NSData.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
5. 字符串的截取和大小寫
C代碼? 收藏代碼
//改變字符串的大小寫
NSString *string1 = @"A String";
NSString *string2 = @"String";
NSLog(@"string1:%@",[string1 uppercaseString]);//大寫
NSLog(@"string2:%@",[string2 lowercaseString]);//小寫
NSLog(@"string2:%@",[string2 capitalizedString]);//首字母大小
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *str0 = @"中文my name is xuanyusong";
NSString *temp = @"is";
NSRange rang = [str0 rangeOfString:temp];
NSLog(@"搜索的字符串在str0中起始點的index 為 %d", rang.location);
NSLog(@"搜索的字符串在str0中結(jié)束點的index 為 %d", rang.location + rang.length);
//將搜索中的字符串替換成為一個新的字符串
NSString *str = [str0 stringByReplacingCharactersInRange:rang withString:@"哇咔咔卡卡咔"];
NSLog(@"替換后字符串為%@", str);
//將字符串中" " 全部替換成 *
str = [str0 stringByReplacingOccurrencesOfString :@" " withString:@"@"];
NSLog(@"替換后字符串為%@", str);
}
使用alloc在內(nèi)存中創(chuàng)建字符串對象后邊可以動態(tài)的操作這個字符串,修改與添加等拄养。
appendstring 方法:向字符串尾部添加一個字符串。
appendFormat方法:向字符串尾部添加多個類型的字符串,可以添加任意數(shù)量與類型的字符串瘪匿。
C代碼? 收藏代碼
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableString * str = [[NSMutableString alloc] init];
//添加普通的字符串
[str appendString:@"aaa"];
//添加字符串 整型 字符型
[str appendFormat:@"我的名字:%@ 我的年齡:%d 我的郵箱:%s",@"justcoding", 25,"justcoding@gmail.com"];
NSLog(@"str = %@",str);
}
字符串中刪除元素
stringWithString 方法:用于創(chuàng)建字符串初始化賦值
rangeOfString方法:傳入字符串返回一個在該字符串中的范圍 也可以寫 NSMakeRange(0, 3) 意思是范圍在字符串0位到第3位
deleteCharactersInRange:刪除字符串 參數(shù)為Range 就是刪除的范圍跛梗。
C代碼? 收藏代碼
- (void)viewDidLoad
{
[super viewDidLoad];
//創(chuàng)建字符串
NSMutableString *str = [NSMutableString stringWithString:@"justcoding is best!"];
//刪除字符串中含"justcoding"的字符
[str deleteCharactersInRange: [str rangeOfString: @"justcoding"]];
NSLog(@"str = %@",str);
}
字符串插入
stringWithString 方法:用于創(chuàng)建字符串初始化賦值
insertString方法:第一個參數(shù) 插入的字符串對象, 第二個參數(shù) 插入的位置棋弥。
C代碼? 收藏代碼
- (void)viewDidLoad
{
[super viewDidLoad];
//創(chuàng)建字符串
NSMutableString *str = [NSMutableString stringWithString:@"justcoding is"];
//在str第10位插入字符串
[str insertString:@"best man" atIndex:10];
NSLog(@"str = %@",str);
}
字符串與指定類型轉(zhuǎn)換
如果轉(zhuǎn)換的參數(shù)非法的話不會拋出異常核偿,好比用中文去轉(zhuǎn)整型。不會報錯 但是轉(zhuǎn)換結(jié)果為 0? 顽染,默認(rèn)值漾岳。
C代碼? 收藏代碼
- (void)viewDidLoad
{
[super viewDidLoad];
//字符串轉(zhuǎn)整型
NSString *str0 = @"1121";
//NSString *str0 = @"中國";
//把字符串強(qiáng)轉(zhuǎn)成整型
int i = [str0 intValue];
NSLog (@"轉(zhuǎn)換后:%i", i);
//字符串轉(zhuǎn)interger
NSString *str1 = @"1985";
// NSString *str1 = @"中國";
//把字符串強(qiáng)轉(zhuǎn)成interger
NSInteger ii = [str1 integerValue];
NSLog (@"轉(zhuǎn)換后:%i", ii);
//字符串轉(zhuǎn)double
NSString *str2 = @"3.145926";
//NSString *str2 = @"中國";
//把字符串強(qiáng)轉(zhuǎn)成double
double d = [str2 doubleValue];
NSLog (@"轉(zhuǎn)換后:%f", d);
//字符串轉(zhuǎn)float
NSString *str3 = @"3.145926";
//NSString *str3 = @"中國";
//把字符串強(qiáng)轉(zhuǎn)成float
double f = [str3 floatValue];
NSLog (@"轉(zhuǎn)換后:%f", f);
}
NSString 常用方法總結(jié)
+(id)stringWithContentsOfFile:path encoding:enc err 創(chuàng)建一個新字符串并將其設(shè)置為 path 指定文件的內(nèi)容,使用字符編碼 enc粉寞,在err 上返回錯誤
+(id)stringWithContentsOfURL:url encoding:enc err 創(chuàng)建一個新字符串并將其設(shè)置為 url 所指向的內(nèi)容尼荆,使用字符編碼 enc,在err 上返回錯誤
+(id)string 創(chuàng)建一個新的空字符串
+(id)stringWithString:nsstring 創(chuàng)建一個新字符串唧垦,將其內(nèi)容設(shè)置為 nsstring 內(nèi)容
-(id)initWithString:nsstring 將字符串內(nèi)容設(shè)置為 nsstring 內(nèi)容
-(id)initWithContentsOfFile:path encoding:enc error:err 將字符串設(shè)置為 path 指定文件的內(nèi)容捅儒,使用字符編碼 enc,在err 上返回錯誤
-(id)initWithContentsOfURL:url encoding:enc error:err 將字符串設(shè)置為 url 所指向的內(nèi)容振亮,使用字符編碼 enc巧还,在err 上返回錯誤
-(UNSigned int)length 返回字符串中字符數(shù)目
-(unichar)characterAtindex:i 返回索引i 所在UniCode 字符
-(NSString*)substringFromIndex:i 返回從索引 i 開始到結(jié)尾的子字符串
-(NSString*)substringWithRange:range 根據(jù)指定范圍返回子字符串
-(NSString*)substringToIndex:i 返回從字符串開始到 索引 i 的子字符串
-(NSComparator*)caseInsensitiveCompare:nsstring 比較兩個字符串大小,忽略大小寫
-(NSComparator*)compare:nsstring 比較兩個字符串大小
-(BOOL)hasPrefix:nsstring 測試字符串是否以 nsstring 開始
-(BOOL)hasSuffix:nsstring 測試字符串是否以 nsstring 結(jié)尾
-(BOOL)isEqualToString:nsstring 測試兩個字符串是否相等
-(NSString*)capitalizedString 返回字符串坊秸,串中的每個單詞的首字母大寫麸祷,其余字母小寫
-(NSString*)lowercaseString 返回轉(zhuǎn)換為小寫的字符串
-(NSString*)uppercaseString 返回轉(zhuǎn)換為大寫的字符串
-(const char*)UTF8String 返回UTF8編碼格式的字符串
-(double)doubleValue 返回轉(zhuǎn)換為double 類型的字符串
-(float)floatValue 返回轉(zhuǎn)換為 float 類型的字符串
-(NSInteger)integerValue 返回轉(zhuǎn)換為 NSInteger 類型的新字符串
-(int)intvalue 返回轉(zhuǎn)換為 int 的字符串
NSMutableString 可修改字符串常用方法
+(id)stringWithCapacity:size 創(chuàng)建一個字符串,容量為size大小
-(id)initWithCapacity:size 初始化一個字符串褒搔,容量為size
-(void)setString:nsstring 將字符串設(shè)置為 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 根據(jù)選項 opts 阶牍,使用指定 range 中的nsstring2 替換所有的 nsstring
```
文章有部分摘自其他博客