黑馬程序員——黑蘋果的日記(6)——Foundation之NSString

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------


一Foundation框架

1概念:框架是由許多類、方法、函數、文檔按照一定的邏輯組織起來的集合

大約有80個框架

2  Foundation框架的作用
   Foundation框架是基礎
   Foundation框架包含了很多開發中常用的數據類型:
  結構體
   枚舉
  類

3使用Foundation框架

使用Foundation框架中的功能引入
#import <Foundation/Foundation.h>

4修改了系統的文件,引起的錯誤
解決方案:刪除Xcode的緩存,
緩存路徑是 /Users/用戶名/Library/Developer/Xcode/DerivedData

要看到上述文件夾, 在終端敲指令顯示隱藏文件夾


二   NSString

1、NSString類
一個NSString對象就代表一個字符串
叫NSString爲字符串類

2、NSString的創建方式
1) 最直接的方式(這是常量字符串)
NSString *str = @"abc";
NSString *st3 = @"abc";

3 格式化的方式(堆區)
NSString *st2 = [NSString stringWithFormat:@"%@", @"jack"];

NSString *str = [[NSString alloc] initWithFormat:@"My age is %d", 10];


4 "字符串常量池"

NSString *str1 = @"你好123";
NSString *str2 = [[NSString alloc] initWithFormat:@"你好%d", 123];
NSString *str3 = [NSString stringWithFormat:@"你好%d", 123];
// 比較下面的3個字符串與上面的3個字符串的地址
NSString *str11 = @"你好123";
NSString *str21 = [[NSString alloc] initWithFormat:@"你好%d", 123];
NSString *str31 = [NSString stringWithFormat:@"你好%d", 123];
結果爲不同

下面的方式是直接把字符串的地址進行賦值, 所以地址一定都是一樣的。
NSString *s1 = str1;
NSLog(@"%@----%@", s1, str1); 
NSLog(@"%p---%p", s1, str1);


5通過NSString進行文件讀寫

方式: 直接根據給定的路徑來讀寫文件
 文件寫入: [str1 writeToFile:@"路徑" atomically:YES
encoding:NSUTF8StringEncoding error:nil];
 文件讀取: [NSString stringWithContentsOfFile:@"路徑"
    encoding:NSUTF8StringEncoding error:nil];

根據NSURL對象來讀取文件內容。
* [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:

   &err];


6 NSString的常見方法:


- (NSString *)uppercaseString; 

全部字符轉爲大寫字母

- (NSString *)lowercaseString 

全部字符轉爲小寫字母

- (NSString *)capitalizedString

首字母變大寫,其他字母都變小寫。

一個句子中有多個單詞,那麼會將每個單詞的首字母 變成大寫,其餘字母變成小寫


- (BOOL)isEqualToString:(NSString *)aString;
兩個字符串的內容相同就返回YES, 否則返回NO

注意: == 比較的是兩個對象的地址是否相同, 不是字符串內容

- (NSComparisonResult)compare:(NSString *)string;
這個方法用來比較兩個字符串內容的大小
比較方法: 逐個字符地進行比較ASCII值,返回NSComparisonResult作爲比較結果

NSComparisonResult是一個枚舉,有3個值:

如果左側 > 右側,返回NSOrderedDescending,
如果左側 < 右側,返回NSOrderedAscending,
如果左側 == 右側返回NSOrderedSame

- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
忽略大小寫進行比較,返回值與compare:一致

- (BOOL)hasPrefix:(NSString *)aString;
是否以aString開頭

- (BOOL)hasSuffix:(NSString *)aString;
是否以aString結尾
- (NSRange)rangeOfString:(NSString *)aString;
用來檢查字符串內容中是否包含了aString
如果包含, 就返回aString的範圍
如果不包含, NSRange的location爲NSNotFound, length爲0

反方向搜索:[str rangeOfString: @”str” options: NSBackwardsSearch]; // 從後向前 搜索

- (NSString *)substringFromIndex:(NSUInteger)from;

從指定位置from開始(包括指定位置的字符)到尾部

- (NSString *)substringToIndex:(NSUInteger)to;
從字符串的開頭一直截取到指定的位置to,但不包括該位置的字符

- (NSString *)substringWithRange:(NSRange)range;
按照所給出的NSRange從字符串中截取子串

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替換target

- (NSUInteger)length;
返回字符串的長度(有多少個字符,無論中文字符、英文字符等等,一個字符就是一個字符)

- (unichar)characterAtIndex:(NSUInteger)index;
返回index位置對應的字符

字符串轉爲基本數據類型

- (double)doubleValue;
- (float)floatValue;
- (int)intValue;
- (char *)UTF8String; // 在操作SQLite數據庫時纔會用到

轉爲C語言中的字符串。

/** 參考代碼:
 C語言字符串:
 char *name = “steve”;
 NSString *s1 = @"123”; char *s2 = s1.UTF8String; printf("%s", s2);
 */
去除所有的空格
[str stringByReplacingOccurrencesOfString:@" " withString:@""]
去除首尾的空格
[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];



7   NSString的不可變性

* NSString *s1 = @"aa"; s1 = @"bb";
這種情況只是指針變量s1 重新指向了, 分配好的字符串空間中的內容並沒有發生改變。

不適用NSString進行拼接





































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章