不可變字符串NSString:
#pragma mark
字符串的創建方法
- (void)createNSString {
// 1.直接賦值
NSString *str1 = @"字符串";
// 2.用一個字符串創建另一個字符串
NSString *str2 = [NSString stringWithString:str1];
// 3.用C語言的字符串創建一個字符串 注意,C語言字符串格式沒有“@”
NSString *str3 = [NSString stringWithUTF8String:"字符串"];
// 4.用格式符創建一個字符串
NSString *str4 = [NSString stringWithFormat:@"%i,%s,%@",7,"abc",@"天下"];
// 5.拼接兩個字符串,形成一個新的字符串
NSString *str5 = [str2 stringByAppendingString:str3];
// 6.利用格式符,拼接一個新的字符串
NSString *str6 = [str4 stringByAppendingFormat:@"%@",str5];
// 7.將C語言的字符串以某種編碼形式創建一個字符串
NSString *str7 = [NSString stringWithCString:"字符串" encoding:NSUTF8StringEncoding];
// 8.利用網絡路徑獲取到文本的NString格式的內容 注意:使用URL 網絡路徑加 "http://" 本地路徑加 "file://" 服務器路徑加 "fttp://"
NSString *str8 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"file:///Users/qiancheng/Desktop/1.txt"] encoding:NSUTF8StringEncoding error:nil];
// 9.利用本地路徑獲取文本的NSString格式的內容 使用File 直接加本地路徑就可以了,無需加“file://”
NSString *str9 = [NSString stringWithContentsOfFile:@"/Users/qiancheng/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
// 10.將NSData類型數據轉化爲NSString
NSString *str10 = [[NSString alloc]initWithData:[NSData data] encoding:NSUTF8StringEncoding];
// 11.利用copy來創建一個新的字符串 注意:copy是複製內容爲不可變字符串,那麼接下來就不可以再對這個複製內容進行修改 主要針對可變字符串NSMutableString。 如果可變字符串使用了copy創建,那麼這個字符串就不可以在進行修改
NSString *str11 = @"fdfsd".copy;
// 12.直接創建
NSString *str12 = [NSString string];
}
#pragma mark 字符串轉化成其他類型
- (void)WithOtherClass {
NSString *str1 = @"567";
int a = [str1 intValue];
NSInteger b = [str1 integerValue];
float c = [str1 floatValue];
double d = [str1 doubleValue];
BOOL e = [str1 boolValue];
long long f = [str1 longLongValue];
// 將OC字符串轉化成c語言字符串 注意接收的C語言字符串爲只讀,不可以修改這接收到的值 當然另外賦值是可以的
const char *ch = [str1 cStringUsingEncoding:NSUTF8StringEncoding];
printf("%s\n",ch);
}
#pragma mark 字符串其他用法
- (void)OtherUsage {
NSString *str1 = @"abcd4321";
// 提取字符串中制定的字符
unichar cChar = [str1 characterAtIndex:0];
NSLog(@"%c",cChar);
// 獲取字符串的長度 str1.length 執行效率高於 [str1 length] 因爲獲取成員變量 比調用實例化方法更快捷
NSInteger ret = str1.length;
ret = [str1 length];
NSLog(@"%ld",ret);
// 比較兩個字符串是否相等
NSString *str2 = @"avf";
NSString *str3 = @"aVf";
BOOL a = [str2 isEqualToString:str3];
NSLog(@"%@", a == 1 ? @"相等" : @"不相等");
// 比較字符串大小
NSComparisonResult b = [str2 compare:str3];
if (b == NSOrderedSame) {
NSLog(@"相等");
} else if (b == NSOrderedAscending) {
NSLog(@"右邊大於左邊");
} else if (b == NSOrderedDescending) {
NSLog(@"左邊大於右邊");
}
// 不區分大小寫比較大小
NSComparisonResult b1 = [str2 caseInsensitiveCompare:str3];
if (b1 == NSOrderedSame) {
NSLog(@"相等");
} else if (b1 == NSOrderedAscending) {
NSLog(@"右邊大於左邊");
} else if (b1 == NSOrderedDescending) {
NSLog(@"左邊大於右邊");
}
// 字符串的大小寫轉化 調用lowercaseString/uppercaseString 它不是修改原來的字符串,它是生成了一個新的字符串
// 大轉小
NSString *str4 = [str3 lowercaseString];
str4 = str3.lowercaseString;
NSLog(@"%@",str4);
// 小轉大
str4 = [str3 uppercaseString];
str4 = str3.uppercaseString;
NSLog(@"%@",str4);
// 判斷網址前綴、後綴和文件的擴展名
NSString * str5 = @"www.baidu.com";
// 判斷前綴
BOOL d = [str5 hasPrefix:@"www."];
NSLog(@"%@", d == 1 ? @"是這個前綴" : @"不是這個前綴");
// 判斷後綴
BOOL e = [str5 hasSuffix:@".com"];
NSLog(@"%@", e == 1 ? @"是這個後綴" : @"不是這個後綴");
// 獲取擴展名
NSString *str6 = [str5 pathExtension];
NSLog(@"%@",str6);
// 查找子串的範圍,返回第一個子字符串出現的位置
NSString *str7 = @"ad fd fig gs";
NSString *str8 = @"a";
// 注意 前者爲父串 後者爲子串 另外,但未找到子串的範圍時,rang.location(位置)也可能有一個隨機值,所以作爲判斷條件,要以rang.length 是否爲0 爲判斷準則來,纔不會出錯。
NSRange rang = [str7 rangeOfString:str8];
NSLog(@"%@",NSStringFromRange(rang));
NSLog(@"%ld,%ld",rang.location,rang.length);
// NSCaseInsensitiveSearch從前往後找,不區分大小寫
// NSBackwardsSearch 從後往前找,找到後面往前第一個子字符串的位置。注意這個位置,是從前往後數的位置,另外區分大小寫。
NSRange rang1 = [str7 rangeOfString:str8 options:NSBackwardsSearch];
NSLog(@"位置:%ld 長度:%ld",rang1.location,rang1.length);
// 提取子串
// 根據範圍來取,方法裏必須放一個定義好的NSRange數據類型,不可以直接放入{1,4}
NSRange rang2 = {1,4};
NSString *str9 = [str7 substringWithRange:rang2];
str9 = [str7 substringWithRange:NSMakeRange(2, 3)];
NSLog(@"%@",str9);
// 從第一個(索引爲0)開始,一直到索引爲2,但是不包含索引爲2的字符
str9 = [str7 substringToIndex:2];
NSLog(@"%@",str9);
// 從索引(3)開始,一直到最後的字符串提取出來
str9 = [str7 substringFromIndex:3];
- (void)createNSString {
// 1.直接賦值
NSString *str1 = @"字符串";
// 2.用一個字符串創建另一個字符串
NSString *str2 = [NSString stringWithString:str1];
// 3.用C語言的字符串創建一個字符串 注意,C語言字符串格式沒有“@”
NSString *str3 = [NSString stringWithUTF8String:"字符串"];
// 4.用格式符創建一個字符串
NSString *str4 = [NSString stringWithFormat:@"%i,%s,%@",7,"abc",@"天下"];
// 5.拼接兩個字符串,形成一個新的字符串
NSString *str5 = [str2 stringByAppendingString:str3];
// 6.利用格式符,拼接一個新的字符串
NSString *str6 = [str4 stringByAppendingFormat:@"%@",str5];
// 7.將C語言的字符串以某種編碼形式創建一個字符串
NSString *str7 = [NSString stringWithCString:"字符串" encoding:NSUTF8StringEncoding];
// 8.利用網絡路徑獲取到文本的NString格式的內容 注意:使用URL 網絡路徑加 "http://" 本地路徑加 "file://" 服務器路徑加 "fttp://"
NSString *str8 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"file:///Users/qiancheng/Desktop/1.txt"] encoding:NSUTF8StringEncoding error:nil];
// 9.利用本地路徑獲取文本的NSString格式的內容 使用File 直接加本地路徑就可以了,無需加“file://”
NSString *str9 = [NSString stringWithContentsOfFile:@"/Users/qiancheng/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
// 10.將NSData類型數據轉化爲NSString
NSString *str10 = [[NSString alloc]initWithData:[NSData data] encoding:NSUTF8StringEncoding];
// 11.利用copy來創建一個新的字符串 注意:copy是複製內容爲不可變字符串,那麼接下來就不可以再對這個複製內容進行修改 主要針對可變字符串NSMutableString。 如果可變字符串使用了copy創建,那麼這個字符串就不可以在進行修改
NSString *str11 = @"fdfsd".copy;
// 12.直接創建
NSString *str12 = [NSString string];
}
#pragma mark 字符串轉化成其他類型
- (void)WithOtherClass {
NSString *str1 = @"567";
int a = [str1 intValue];
NSInteger b = [str1 integerValue];
float c = [str1 floatValue];
double d = [str1 doubleValue];
BOOL e = [str1 boolValue];
long long f = [str1 longLongValue];
// 將OC字符串轉化成c語言字符串 注意接收的C語言字符串爲只讀,不可以修改這接收到的值 當然另外賦值是可以的
const char *ch = [str1 cStringUsingEncoding:NSUTF8StringEncoding];
printf("%s\n",ch);
}
#pragma mark 字符串其他用法
- (void)OtherUsage {
NSString *str1 = @"abcd4321";
// 提取字符串中制定的字符
unichar cChar = [str1 characterAtIndex:0];
NSLog(@"%c",cChar);
// 獲取字符串的長度 str1.length 執行效率高於 [str1 length] 因爲獲取成員變量 比調用實例化方法更快捷
NSInteger ret = str1.length;
ret = [str1 length];
NSLog(@"%ld",ret);
// 比較兩個字符串是否相等
NSString *str2 = @"avf";
NSString *str3 = @"aVf";
BOOL a = [str2 isEqualToString:str3];
NSLog(@"%@", a == 1 ? @"相等" : @"不相等");
// 比較字符串大小
NSComparisonResult b = [str2 compare:str3];
if (b == NSOrderedSame) {
NSLog(@"相等");
} else if (b == NSOrderedAscending) {
NSLog(@"右邊大於左邊");
} else if (b == NSOrderedDescending) {
NSLog(@"左邊大於右邊");
}
// 不區分大小寫比較大小
NSComparisonResult b1 = [str2 caseInsensitiveCompare:str3];
if (b1 == NSOrderedSame) {
NSLog(@"相等");
} else if (b1 == NSOrderedAscending) {
NSLog(@"右邊大於左邊");
} else if (b1 == NSOrderedDescending) {
NSLog(@"左邊大於右邊");
}
// 字符串的大小寫轉化 調用lowercaseString/uppercaseString 它不是修改原來的字符串,它是生成了一個新的字符串
// 大轉小
NSString *str4 = [str3 lowercaseString];
str4 = str3.lowercaseString;
NSLog(@"%@",str4);
// 小轉大
str4 = [str3 uppercaseString];
str4 = str3.uppercaseString;
NSLog(@"%@",str4);
// 判斷網址前綴、後綴和文件的擴展名
NSString * str5 = @"www.baidu.com";
// 判斷前綴
BOOL d = [str5 hasPrefix:@"www."];
NSLog(@"%@", d == 1 ? @"是這個前綴" : @"不是這個前綴");
// 判斷後綴
BOOL e = [str5 hasSuffix:@".com"];
NSLog(@"%@", e == 1 ? @"是這個後綴" : @"不是這個後綴");
// 獲取擴展名
NSString *str6 = [str5 pathExtension];
NSLog(@"%@",str6);
// 查找子串的範圍,返回第一個子字符串出現的位置
NSString *str7 = @"ad fd fig gs";
NSString *str8 = @"a";
// 注意 前者爲父串 後者爲子串 另外,但未找到子串的範圍時,rang.location(位置)也可能有一個隨機值,所以作爲判斷條件,要以rang.length 是否爲0 爲判斷準則來,纔不會出錯。
NSRange rang = [str7 rangeOfString:str8];
NSLog(@"%@",NSStringFromRange(rang));
NSLog(@"%ld,%ld",rang.location,rang.length);
// NSCaseInsensitiveSearch從前往後找,不區分大小寫
// NSBackwardsSearch 從後往前找,找到後面往前第一個子字符串的位置。注意這個位置,是從前往後數的位置,另外區分大小寫。
NSRange rang1 = [str7 rangeOfString:str8 options:NSBackwardsSearch];
NSLog(@"位置:%ld 長度:%ld",rang1.location,rang1.length);
// 提取子串
// 根據範圍來取,方法裏必須放一個定義好的NSRange數據類型,不可以直接放入{1,4}
NSRange rang2 = {1,4};
NSString *str9 = [str7 substringWithRange:rang2];
str9 = [str7 substringWithRange:NSMakeRange(2, 3)];
NSLog(@"%@",str9);
// 從第一個(索引爲0)開始,一直到索引爲2,但是不包含索引爲2的字符
str9 = [str7 substringToIndex:2];
NSLog(@"%@",str9);
// 從索引(3)開始,一直到最後的字符串提取出來
str9 = [str7 substringFromIndex:3];
NSLog(@"%@",str9);
}
可變字符串NSMutableString:
+ (void)test {
//可變字符串繼承於不可變字符串,所有不可變字符串的方法可變字符串都可以用
//嚴禁用下面方法(形式)可變字符串
//NSMutableString * str1 = @"aaaa";
MutableString *mutableString = [[MutableString alloc]init];
[mutableString createMutableString];
[mutableString otherUage];
}
#pragma mark 創建可變字符串 除了繼承NSString創建對象的方法,NSMutableString其他的創建實例的方法
- (void)createMutableString {
// 1.這種方法創建可變字符串,裏面的內容是空,但是他的堆空間可以改變大小的
NSMutableString *str1 = [[NSMutableString alloc]init];
// 2.初始化字符串時給了一個0字節大小的空間 這種初始化方法效率高
NSMutableString *str2 = [NSMutableString stringWithCapacity:0];
// 3.利用MutableCopy 創建 注意不要使用copy創建,不然所獲取的值不可以修改。
NSMutableString *str3 = str2.mutableCopy;
// 4.重置字符串 但字符串爲空時,則爲賦值
[str3 setString:@"sdsd"];
[str3 setString:@"2333"];
NSLog(@"%@",str3);
}
//可變字符串繼承於不可變字符串,所有不可變字符串的方法可變字符串都可以用
//嚴禁用下面方法(形式)可變字符串
//NSMutableString * str1 = @"aaaa";
MutableString *mutableString = [[MutableString alloc]init];
[mutableString createMutableString];
[mutableString otherUage];
}
#pragma mark 創建可變字符串 除了繼承NSString創建對象的方法,NSMutableString其他的創建實例的方法
- (void)createMutableString {
// 1.這種方法創建可變字符串,裏面的內容是空,但是他的堆空間可以改變大小的
NSMutableString *str1 = [[NSMutableString alloc]init];
// 2.初始化字符串時給了一個0字節大小的空間 這種初始化方法效率高
NSMutableString *str2 = [NSMutableString stringWithCapacity:0];
// 3.利用MutableCopy 創建 注意不要使用copy創建,不然所獲取的值不可以修改。
NSMutableString *str3 = str2.mutableCopy;
// 4.重置字符串 但字符串爲空時,則爲賦值
[str3 setString:@"sdsd"];
[str3 setString:@"2333"];
NSLog(@"%@",str3);
}
#pragma mark 除了繼承於NSString外的,其他一些用法
- (void)otherUage
{
NSMutableString *str1 = @"".mutableCopy;
// 追加字符串
[str1 appendString:@"123"];
NSLog(@"%@",str1);
// 以格式符形式追加字符串
[str1 appendFormat:@"%d %@",5,@"haha"];
NSLog(@"%@",str1);
// 插入字符串
[str1 insertString:@"XXXXXXX" atIndex:2];
NSLog(@"%@",str1);
// 替換字符串,替換字符串需要範圍NSRang
[str1 replaceCharactersInRange:NSMakeRange(2, 2) withString:@"Y"];
NSLog(@"%@",str1);
//刪除字符串
[str1 deleteCharactersInRange:NSMakeRange(0, 4)];
NSLog(@"%@",str1);
NSMutableString *str1 = @"".mutableCopy;
// 追加字符串
[str1 appendString:@"123"];
NSLog(@"%@",str1);
// 以格式符形式追加字符串
[str1 appendFormat:@"%d %@",5,@"haha"];
NSLog(@"%@",str1);
// 插入字符串
[str1 insertString:@"XXXXXXX" atIndex:2];
NSLog(@"%@",str1);
// 替換字符串,替換字符串需要範圍NSRang
[str1 replaceCharactersInRange:NSMakeRange(2, 2) withString:@"Y"];
NSLog(@"%@",str1);
//刪除字符串
[str1 deleteCharactersInRange:NSMakeRange(0, 4)];
NSLog(@"%@",str1);
}