字符串
知識點
1.NSString
2.NSMutableString
3.了解NSMutableString與NSString的繼承關系
了解:
1.什么是字符編碼
是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈 沖)進行配對。即在符號集合與數字系統之間建立對應關系。
字符編碼百科:http://baike.baidu.com/link?url=bFKEidJQmo3JEljFQRbtkEyToRe1_SrqbCgNsv4jKcYGFyTBixJjhTVYegSiozPVpvrR99cQhUoQq_01BnF1L_
2.UTF8編碼:UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson於1992年創建。現在已經標准化為RFC 3629。UTF-8用1到6個字節編碼UNICODE字符。用在網頁上可以同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。
========= 不可變字符串(NSString) =========
1.為什么需要NSString對象
答:在OC中創建字符串時,一般不使用C的方法,
因為C將字符串作為字符數組,所以在操作時會有很多不方便的地方,
在Cocoa中NSString集成的一些方法,可以很方便的操作字符串。
2.OC中定義字符串和C語言定義字符串
//C字符串常量
char *cString = "c字符串";
printf("c string is %s\n",cString);
//OC字符串常量
NSString *ocString = @"oc字符串";
NSLog(@"oc string is %@",ocString);
3.NSLog如何格式化NSString對象
%@
4.字符串創建
(1)定義一個空的不可變字符串(一般用不到):
NSString *string = [[NSString alloc] init];
(2)定義一個有值的字符串(一般用不到)
[NSString stringWithString:@"test"];
[[NSString alloc] initWithString:<#(NSString *)#>];
5.如何格式化一個字符串
[NSString stringWithFormat:<#(NSString *), ...#>];
6.C語言字符串和NSString的轉換
<1>c字符串轉化為NSString
[NSString stringWithUTF8String:c];
<2>NSString轉化為C
[string UTF8String];
7.如何從文本文件中讀取字符串
//第1種:
/*
stringWithContentsOfFile:要讀取文件路徑
encoding:編碼方式
error:錯誤信息,可以傳nil
*/
//類方法
s = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//對象方法
[[NSString alloc] initWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
第2種:
//把路徑的字符串轉化為NSURL對象
NSURL *filePath = [NSURL fileURLWithPath:path];
string = [NSString stringWithContentsOfURL:filePath encoding:NSUTF8StringEncoding error:nil];
8.如何把一個字符串寫入到文件中
/*
writeToFile:要寫入的文件路徑(file path)
atomically:YES表示原子性,NO表示非原子性。一般是YES(比較安全),當為YES,系統在寫入的過程中會創建一個臨時文件,系統先把數據寫入到臨時文件里面,如果寫入成功,最后賦值到目標文件里面。
encoding:編碼,一般是UTF8(NSUTF8StringEncoding)
*/
NSError *error;
//文件不存在會自動創建
[string writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
9.如何從網絡上讀取字符串
NSURL *url = [NSURL URLWithString:遠程地址];
string = [NSString stringWithContentsOfURL: url encoding:NSUTF8StringEncoding error:nil];
10.求字符串長度(一個中文長度為1)
[string length]
11.通過索引獲取相應的字符
[string characterAtIndex:0]
12.字符串判斷
1)判斷兩個字符串內容是否相同
[s1 isEqualToString:s2]
2)判斷兩個字符串是否是同一個對象
if (s1 == s2)
{
NSLog(@"s1和s2是同一個對象");
}
else
{
NSLog(@"s1和s2不是同一個對象");
}
13.字符串比較
1)兩個字符串比較(區分大小寫)
NSComparisonResult result = [s1 compare:s2];
if (result == NSOrderedAscending)
{
NSLog(@"s2 > s1");
}
else if (result == NSOrderedSame)
{
NSLog(@"s1 = s2");
}
else
{
NSLog(@"s2 < s1");
}
2)比較兩個字符串(忽略大小寫)
//忽略大小寫
result = [s1 caseInsensitiveCompare:s2];
14.轉化為基本類型(int,float,bool,double,integer)
//轉化為int
[num2 intValue];
//轉化為NSInteger
[num2 integerValue];
//轉化為Double
[num2 doubleValue];
//float
[num2 floatValue];
//long long
[num2 longLongValue];
//bool
[num2 boolValue];
15.把一個字符串轉化為大寫,小寫,各個單詞的首字母大寫
//轉化為大寫
NSString *upperString = [s1 uppercaseString];
NSLog(@"大寫:%@",upperString);
//轉化為小寫
NSString *lowString = [s1 lowercaseString];
NSLog(@"小寫:%@",lowString);
//各個單詞的首字母大寫
NSString *ss = [s1 capitalizedString];
NSLog(@"各個單詞的首字母大寫:%@",ss);
16. 替換字符串
[S stringByReplacingOccurrencesOfString:A withString:B];//把S中所有的A換為B
[string stringByReplacingOccurrencesOfString:@"l3l" withString:@"s"];
17.分割一個字符串,轉化為數組
[string componentsSeparatedByString:@“分隔符”];
18.字符串截取
//從指定索引截取到最后
NSString *subString = [string substringFromIndex:起始索引];
//從開始截取到指定的索引之前
subString = [string substringToIndex:終止索引(不包括當前索引)]’
//截取字符串的一部分
//范圍
NSRange range = NSMakeRange(2, 3);
[string substringWithRange:range];
19.字符串拼接
(1)拼接一個字符串
[str1 stringByAppendingString:str2]
(2)拼接一個格式化字符串
[str1 stringByAppendingFormat:@" %@",str2]
20.查找字符串
//[string rangeOfString:要查找的字符串]
//只會查找第一次出現的字符串,從前向后查找
range = [string rangeOfString:@"test"];
NSLog(@"%ld - %ld",range.location,range.length);
/*
NSCaseInsensitiveSearch 不區分大小寫
NSLiteralSearch 區分大小寫
NSBackwardsSearch 從后向前查找
*/
range = [string rangeOfString:@"test" options:NSBackwardsSearch];
NSLog(@"%ld - %ld",range.location,range.length);
21.判斷一個字符串是否以某個前綴或者后綴
//判斷是否以某個字符串前綴開頭
[string hasPrefix:@"he22"]
//判斷是否以某個字符串前綴結尾
[string hasSuffix:@"ds"];
22.路徑
1)路徑后面追加一個文件名或者路徑(網絡會用到)
[path stringByAppendingPathComponent:文件名或者文件夾名字];
2)把指定的字符串數組拼接成路徑
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Users",@"qianfeng",@"desktop",@"新建文件夾", nil];
newPath = [NSString pathWithComponents:array];
3)將路徑分割成字符串數組
NSArray *components = [path pathComponents];
4)判斷是否是絕對路徑
BOOL isAbsolutePath = [path isAbsolutePath];
5)獲取最后一個目錄或者文件名
//取路徑的最后一部分
NSString *s = [path lastPathComponent];
6)刪除路徑最后一部分
[path stringByDeletingLastPathComponent];
7)獲取文件后綴
[path pathExtension]
8)刪除后綴
[path stringByDeletingPathExtension];
9)添加后綴
[path stringByAppendingPathExtension:@"png"];
.
========= 可變字符串(NSMutableString) =========
1.初始化可變字符串(必須初始化)
NSMutableString *string = [[NSMutableString alloc] init];
string = [NSMutableString string];
2.初始化帶有字符串的可變字符串
[NSMutableString stringWithString:@"sss"];
3.設置字符串
//設置字符串(會覆蓋原來字符串內容)
[string setString:@"測試"];
4.在指定的位置插入字符串
[string insertString:@“要插入的字符串” atIndex:插入字符串的下標];
5.追加一個部分字符串(在最后追加)
[string appendString:@"🐷"];
//追加格式化字符串
[string appendFormat:@"dog=%@ cat=%@",@"🐶",@"🐱"];
6.刪除字符串一部分
//要刪除的范圍
NSRange deleteRange = NSMakeRange(3, 2);
//刪除指定范圍的字符
[string deleteCharactersInRange:deleteRange];