字符串:NSString 和 NSMutableString

不可變字符串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];
    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);
}

#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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章