字符串的創(chuàng)建
-
通過不同的方式創(chuàng)建字符串,字符串對象存儲的位置也不一樣
- 如果通過字符串常量創(chuàng)建,那么字符串對象存儲在常量區(qū)中
- 如果通過alloc initWithFormat/stringWithFormat創(chuàng)建,那么字符串對象存儲在堆取中
注意:在Xcode6之后,只要創(chuàng)建的不是字符串常量,那么不管創(chuàng)建多少分相同的字符串,地址都是相同的
字符串讀寫
// 從文件中讀取
NSString *path = @"/Users/coder/Desktop/sublime.txt";
NSError *error = nil;
/**
file:文件路徑
encoding:編碼
error:保存錯誤信息
*/
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if(error == nil){
// 沒有錯誤
NSLog(@"%@",str);
}else{
// 有錯誤
NSLog(@"%@",error.localizedDescription);
}
- 將字符串寫入文件,那么重復(fù)寫入同一個文件,那么會覆蓋之前寫入的
// 將字符串寫入到文件中
NSString *path = @"/Users/coder/Desktop/sublime1.txt";
NSString *str = @"好好擼代碼";
/**
atomically:如果傳入YES,字符串寫入文件的過程中如果沒有寫完,那么不會生成文件
如果傳入NO,字符串寫入文件的多城中如果沒有寫完,會生成文件
*/
BOOL flag = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
- NSURL
- URL的創(chuàng)建
// 1、通過URLWithString創(chuàng)建
NSURL *url1 = [NSURL URLWithString:@"https://www.baidu.com"];
// 2、通過fileURLWithPath創(chuàng)建
NSURL *url2 = [NSURL fileURLWithPath:@"/Users/coder/Desktop/sublime1.txt"];
- 通過
fileURLWithPath:
方法創(chuàng)建URL,那么系統(tǒng)將會自動給字符串加上file://
,所以字符串中不用再寫了 -
url不支持中文
,如果url中包含中文,那么無法訪問 - 如果是通過
fileURLWithPath:
方法創(chuàng)建的url,可以進行訪問
的,系統(tǒng)內(nèi)部會自動對URL中包含的中文進行處理 - 如果使用
URLWithString
創(chuàng)建,不可以進行訪問
,轉(zhuǎn)換之前通過編碼就可以stringByAddingPercentEscapesUsingEncoding
NSString *path = @"file:///Users/coder/Desktop/大眾.txt";
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:path];
字符串比較
- 轉(zhuǎn)換大小寫
NSString *str = @"welcome";
// 全部字符轉(zhuǎn)換成大寫
str = [str uppercaseString];
// 全部字符轉(zhuǎn)換成小寫
str = [str lowercaseString];
// 首字母大寫,其他字母小寫
str = [str capitalizedString];
- 字符串比較
// NSString的比較
NSString *str1 = @"yyy";
NSString *str2 = @"yyy";
- isEqualToString:
- 兩個字符串相同就返回YES,否則就返回NO
if([str1 isEqualToString:str2]){
// 字符串內(nèi)容一樣
}
if(str1 == str2){
// 字符串地址一樣
}
- compare:
- 這個方法可以用來比較兩個字符換內(nèi)容的大小
- 比較方法:逐個字符的進行比較ASCII值,返回NSComparisonResult作為比較結(jié)果
- NSComparisonResult是一個枚舉,有3個值:
- 如果左側(cè) > 右側(cè),返回NSOrderedDescending,
- 如果左側(cè) < 右側(cè),返回NSOrderedAscending,
- 如果左側(cè) == 右側(cè)返回NSOrderedSame
switch ([str1 compare:str2]) {
case NSOrderedAscending:
// str2 大于 str1
break;
case NSOrderedDescending:
// str1 大于 str2
break;
case NSOrderedSame:
// 兩個字符串相等
break;
default:
break;
}
- caseInsensitiveCompare:
- 忽略大小寫進行比較,返回值與compare:方法一樣
switch ([str1 caseInsensitiveCompare:str2]) {
case NSOrderedAscending:
// str2 大于 str1
break;
case NSOrderedDescending:
// str1 大于 str2
break;
case NSOrderedSame:
// 兩個字符串相等
break;
default:
break;
}
字符串搜索
// 是否是以str開頭
- (BOOL)hasPrefix:(NSString *)str;
// 是否是以str結(jié)尾
- (BOOL)hasSuffix:(NSString *)str;
// 用來檢查字符串內(nèi)容中是否包含了searchString
// 如果包含就返回searchString的范圍
// 如果不包含,NSRange的location為NSNotFound,length = 0
- (NSRange)rangeOfString:(NSString *)searchString;
- NSRange
- NSRange的定義
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
typedef unsigned long NSUInteger;
NSRange用來表示事物的一個范圍,通常是字符串里的字符范圍或者數(shù)組里面元素范圍
-
NSRange有兩個成員:
- NSUInteger location:表示該范圍起始位置
- NSUInteger length:表示該范圍的長度
NSRange創(chuàng)建的三種方式
// 方式1
NSRange range;
range.location = 8;
range.length = 1;
// 方式2
NSRange range = {4,2};
NSRange range = {.location = 7, .length = 10};
// 方式3
NSRange range = NSMakeRange(10, 10);
字符串截取
- - (NSString *)substringFromIndex: (NSUInteger)from;
- 從指定位置from開始,到字符串尾部,包含from位置的字符
NSString *str = @"0123456789";
str = [str substringFromIndex:8];
NSLog(@"%@",str);
// 輸出結(jié)果:89
- - (NSString *)substringToIndex: (NSUInteger)to;
- 從字符串開頭一直到指定位置to,不包含to位置字符
NSString *str = @"0123456789";
str = [str substringToIndex:7];
NSLog(@"%@",str);
// 輸出結(jié)果:0123456
- - (NSString *)substringWithRange: (NSRange)range;
- 按參數(shù)range截取字符串
NSString *str = @"0123456789";
str = [str substringWithRange:NSMakeRange(1, 2)];
NSLog(@"%@",str);
// 輸出結(jié)果:12
字符串替換
// 將所有的3都替換成4
NSString *str = @"123123123";
str = [str stringByReplacingOccurrencesOfString:@"3" withString:@"4"];
// 去除首尾空格
NSString *str1 = @" 123123 ";
str1 = [str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// 去除首尾其他字符
NSString *str2 = @"***123123***";
str2 = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]];
字符串和路徑
- 絕對路徑
// 判斷是否是絕對路徑
// 其實就是判斷是否以/開頭
NSString *str = @"/Users/coder/Desktop/sublime.txt";
if(str.isAbsolutePath){
NSLog(@"是絕對路徑");
}else{
NSLog(@"不是絕對路徑");
}
- 獲得最后一個目錄
NSString *str = @"/Users/coder/Desktop/sublime.txt";
NSString *component = [str lastPathComponent];
NSLog(@"%@",component);//sublime.txt
- 刪除最后一個目錄
NSString *str = @"/Users/coder/Desktop/sublime.txt";
NSString *newStr = [str stringByDeletingLastPathComponent];
NSLog(@"%@",newStr);// /Users/coder/Desktop
- 在路徑后面拼接一個目錄
// 在路徑后面拼接一個目錄
// 其實就是在最后面加上/和要拼接得內(nèi)容
// 注意會判斷后面有沒有/有就不添加了, 沒有就添加, 并且如果有多個會替換為1個
NSString *path = @"/Users/coder/Desktop///";
path = [path stringByAppendingPathComponent:@"123"];
NSLog(@"%@",path); // /Users/coder/Desktop/123
- 獲得擴展名
NSString *strPath = @"Desktop.sublime.txt";
NSString *newStr1 = [strPath pathExtension];
NSLog(@"%@",newStr1);// txt
- 刪除擴展名
NSString *newStr2 = [strPath stringByDeletingPathExtension];
NSLog(@"%@",newStr2);// Desktop.sublime
- 在尾部添加一個擴展名
NSString *newStr3 = [strPath stringByAppendingPathExtension:@"gif"];
NSLog(@"%@",newStr3); // Desktop.sublime.txt.gif
字符串和其他類型數(shù)據(jù)轉(zhuǎn)換
- 轉(zhuǎn)換為基本數(shù)據(jù)類型
- doubleValue
- floatValue
- intValue
// 注意: 如果不是int,double,float,bool,integer,longlong這些類型就不要亂用
NSString *str1 = @"111";
NSString *str2 = @"123.1";
[str1 integerValue];
[str2 doubleValue];
- 和C語言字符串互相轉(zhuǎn)換
// OC字符串轉(zhuǎn)換為C語言字符串
NSString *str3 = @"1324";
const char *cStr = [str3 UTF8String];
// C語言字符串轉(zhuǎn)換成OC字符串
char *cStr = "abc";
NSString *str4 = [NSString stringWithUTF8String:cStr];