iOS sting處理(可變,不可變)

Objective-C 中核心處理字符串的類是 NSString 與 NSMutableString ,這兩個類最大的區別就是NSString 創建賦值以后該字符串的內容與長度不能在動態的更改,除非重新給這個字符串賦值。而NSMutableString 創建賦值以后可以動態在該字符串上更改內容與長度。

```

1.創建NSString字符串

NSString 與 char* 最大的區別就是 NSString是一個objective對象,而char* 是一個字節數組。@+" 字符串 " 這個符號為objective-c NSString 字符串常量的標準用法,char* 創建的時候 無需添加@

- (void)viewDidLoad

{

[super viewDidLoad];

//經典的字符串賦值

NSString *str0 = @"my name is justcoding !";

//字符串格式化合并分別包括

//NSString*類型 int類型 char*類型

NSString *str1 = [NSString stringWithFormat:@"我的名字:%@ 我的年齡:%d 我的郵箱:%s",@"justcoding", 25,"justcoding@gmail.com"];

//字符串賦值 參數中只可以寫一個字符串 和第一種很像

NSString *str2 = [NSString stringWithString:@"我是字符串"];

//字符串轉換為utf-8格式 參數為char*類型

NSString *str3 = [NSString stringWithUTF8String:"字符串轉換utf-8格式"];

//字符串合并

int i? = 100;

char*c = "xuanyusong";

NSString *temp = @"我是臨時字符串";

//在字符串temp的基礎繼續添加 int i 與 char* c 組成一個新的字符串

NSString *str4 = [temp stringByAppendingFormat:@"整型: %d 字符型 :%s",i,c];

//在字符串temp的基礎繼續添加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];

//經典的字符串賦值

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開頭");

}

//字符串以結尾比較

if([str1 hasSuffix:@"coding"])

{

NSLog(@"str1字符串以coding結尾");

}

}

對比字符串//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 判斷兩者內容是否相同

NSString *astring01 = @"this is a String!";

NSString *astring02 = @"This is a String!";

BOOL result = [astring01 compare:astring02] = = NSOrderedDescending;

NSLog(@"result:%d",result);

//NSOrderedDescending 判斷兩對象值的大小(按字母順序進行比較,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判斷兩對象值的大小(按字母順序進行比較,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:不區分大小寫比較 NSLiteralSearch:進行完全比較,區分大小寫 NSNumericSearch:比較字符串的字符個數,而不是字符值。

文件字符串操作(讀寫)

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應用開發:什么是ARC?

C代碼? 收藏代碼

//擴展路徑

NSString *Path = @"~/NSData.txt";

NSString *absolutePath = [Path stringByExpandingTildeInPath];

NSLog(@"absolutePath:%@",absolutePath);

NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]);

C代碼? 收藏代碼

//文件擴展名

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中結束點的index 為 %d", rang.location + rang.length);

//將搜索中的字符串替換成為一個新的字符串

NSString *str = [str0 stringByReplacingCharactersInRange:rang withString:@"哇咔咔卡卡咔"];

NSLog(@"替換后字符串為%@", str);

//將字符串中" " 全部替換成 *

str = [str0 stringByReplacingOccurrencesOfString :@" " withString:@"@"];

NSLog(@"替換后字符串為%@", str);

}

使用alloc在內存中創建字符串對象后邊可以動態的操作這個字符串,修改與添加等。

appendstring 方法:向字符串尾部添加一個字符串。

appendFormat方法:向字符串尾部添加多個類型的字符串,可以添加任意數量與類型的字符串。

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 方法:用于創建字符串初始化賦值

rangeOfString方法:傳入字符串返回一個在該字符串中的范圍 也可以寫 NSMakeRange(0, 3) 意思是范圍在字符串0位到第3位

deleteCharactersInRange:刪除字符串 參數為Range 就是刪除的范圍。

C代碼? 收藏代碼

- (void)viewDidLoad

{

[super viewDidLoad];

//創建字符串

NSMutableString *str = [NSMutableString stringWithString:@"justcoding is best!"];

//刪除字符串中含"justcoding"的字符

[str deleteCharactersInRange: [str rangeOfString: @"justcoding"]];

NSLog(@"str = %@",str);

}

字符串插入

stringWithString 方法:用于創建字符串初始化賦值

insertString方法:第一個參數 插入的字符串對象, 第二個參數 插入的位置。

C代碼? 收藏代碼

- (void)viewDidLoad

{

[super viewDidLoad];

//創建字符串

NSMutableString *str = [NSMutableString stringWithString:@"justcoding is"];

//在str第10位插入字符串

[str insertString:@"best man" atIndex:10];

NSLog(@"str = %@",str);

}

字符串與指定類型轉換

如果轉換的參數非法的話不會拋出異常,好比用中文去轉整型。不會報錯 但是轉換結果為 0? ,默認值。

C代碼? 收藏代碼

- (void)viewDidLoad

{

[super viewDidLoad];

//字符串轉整型

NSString *str0 = @"1121";

//NSString *str0 = @"中國";

//把字符串強轉成整型

int i = [str0 intValue];

NSLog (@"轉換后:%i", i);

//字符串轉interger

NSString *str1 = @"1985";

// NSString *str1 = @"中國";

//把字符串強轉成interger

NSInteger ii = [str1 integerValue];

NSLog (@"轉換后:%i", ii);

//字符串轉double

NSString *str2 = @"3.145926";

//NSString *str2 = @"中國";

//把字符串強轉成double

double d = [str2 doubleValue];

NSLog (@"轉換后:%f", d);

//字符串轉float

NSString *str3 = @"3.145926";

//NSString *str3 = @"中國";

//把字符串強轉成float

double f = [str3 floatValue];

NSLog (@"轉換后:%f", f);

}

NSString 常用方法總結

+(id)stringWithContentsOfFile:path encoding:enc err 創建一個新字符串并將其設置為 path 指定文件的內容,使用字符編碼 enc,在err 上返回錯誤

+(id)stringWithContentsOfURL:url encoding:enc err 創建一個新字符串并將其設置為 url 所指向的內容,使用字符編碼 enc,在err 上返回錯誤

+(id)string 創建一個新的空字符串

+(id)stringWithString:nsstring 創建一個新字符串,將其內容設置為 nsstring 內容

-(id)initWithString:nsstring 將字符串內容設置為 nsstring 內容

-(id)initWithContentsOfFile:path encoding:enc error:err 將字符串設置為 path 指定文件的內容,使用字符編碼 enc,在err 上返回錯誤

-(id)initWithContentsOfURL:url encoding:enc error:err 將字符串設置為 url 所指向的內容,使用字符編碼 enc,在err 上返回錯誤

-(UNSigned int)length 返回字符串中字符數目

-(unichar)characterAtindex:i 返回索引i 所在UniCode 字符

-(NSString*)substringFromIndex:i 返回從索引 i 開始到結尾的子字符串

-(NSString*)substringWithRange:range 根據指定范圍返回子字符串

-(NSString*)substringToIndex:i 返回從字符串開始到 索引 i 的子字符串

-(NSComparator*)caseInsensitiveCompare:nsstring 比較兩個字符串大小,忽略大小寫

-(NSComparator*)compare:nsstring 比較兩個字符串大小

-(BOOL)hasPrefix:nsstring 測試字符串是否以 nsstring 開始

-(BOOL)hasSuffix:nsstring 測試字符串是否以 nsstring 結尾

-(BOOL)isEqualToString:nsstring 測試兩個字符串是否相等

-(NSString*)capitalizedString 返回字符串,串中的每個單詞的首字母大寫,其余字母小寫

-(NSString*)lowercaseString 返回轉換為小寫的字符串

-(NSString*)uppercaseString 返回轉換為大寫的字符串

-(const char*)UTF8String 返回UTF8編碼格式的字符串

-(double)doubleValue 返回轉換為double 類型的字符串

-(float)floatValue 返回轉換為 float 類型的字符串

-(NSInteger)integerValue 返回轉換為 NSInteger 類型的新字符串

-(int)intvalue 返回轉換為 int 的字符串

NSMutableString 可修改字符串常用方法

+(id)stringWithCapacity:size 創建一個字符串,容量為size大小

-(id)initWithCapacity:size 初始化一個字符串,容量為size

-(void)setString:nsstring 將字符串設置為 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 根據選項 opts ,使用指定 range 中的nsstring2 替換所有的 nsstring

```

文章有部分摘自其他博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容