ios小技巧總結:string相關

位數不足補0

NSString *str = [NSString stringWithFormat:@"%02zd點",n];
//  e.g:  %02zd -->05       %03zd-->005

獲取漢字拼音

- (NSString *) pinyinFirstLetter:(NSString*)sourceString {
    
    NSMutableString *source = [sourceString mutableCopy];
    CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMandarinLatin, NO);
    CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformStripDiacritics, NO);   // 這一行是去聲調的
    
    NSLog(@".....>> %@",source);
    
    return source;
}

首字母大寫

NSString *str = @"abcdefghijklmn";
    NSString *resultStr;
    if (str && str.length > 0) {
        resultStr = [str stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[str substringToIndex:1] capitalizedString]];
    }
    NSLog(@"%@", resultStr);

字符串開頭、結尾

if([str hasPrefix:@"http"]){ 

} 

if([str hasSuffix:@".com"]){ 

} 

長按復制

[self.view addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(pasteBoard:)]];
}
- (void)pasteBoard:(UILongPressGestureRecognizer *)longPress {
    if (longPress.state == UIGestureRecognizerStateBegan) {
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = @"需要復制的文本";
    }

判斷String是否包含某字符串

[str containsString:@"abc"];
或
NSString *women = @"Hey  you are boy?";
if ([women containsString:@"boy"]) 

/*--->字符串開頭 是否含有某字符串
if ([string hasPrefix:@"hello"]) {

/*--->字符串末尾 是否有某字符串
if ([string hasSuffix:@"bitch"]) {

取單個字符

// 取第i個字符
NSString *chara = [string substringWithRange:NSMakeRange(i, 1)];

字符串反轉

- (NSString *)reverseWordsInString:(NSString *)str
{    
    NSMutableString *newString = [[NSMutableString alloc] initWithCapacity:str.length];
    for (NSInteger i = str.length - 1; i >= 0 ; i --)
    {
        unichar ch = [str characterAtIndex:i];       
        [newString appendFormat:@"%c", ch];    
    }    
     return newString;
}
或
- (NSString*)reverseWordsInString:(NSString*)str
{
    NSMutableString *reverString = [NSMutableString stringWithCapacity:str.length];
    [str enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences  usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    [reverString appendString:substring];
}];
    return reverString;
}

判斷字符串是否為空

+ (BOOL)isEqualToNil:(NSString *)str {
    return str.length <= 0 || [str isEqualToString:@""] || !str;
}

- (BOOL)isExist {
    NSString *str = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    return (str.length != 0);
}

或 
使用宏定義:
#define Validity_Str(string) (((string != nil) && (string.length>0))?YES:NO)    // 判斷字符串是否有效

在文字中添加表情

//emoji 表情,只需在label的text中加上“\u+表情代碼”即可。如:
aLabel.text = @"今天天氣非常好\uE337";

附:表情代碼大全(取Unicode編碼的代碼,如:U+1F604-->U0001F604)
http://punchdrunker.github.io/iOSEmoji/table_html/index.html

判斷輸入的 是否漢字

- (BOOL)isHasChineseWithStr:(NSString *)strFrom {
    
    for (int i=0; i<strFrom.length; i++) {
        
        NSRange range =NSMakeRange(i, 1);
        NSString * strFromSubStr=[strFrom substringWithRange:range];
        const char *cStringFromstr = [strFromSubStr UTF8String];
        
        if (strlen(cStringFromstr)==3) {
            //漢字
            return YES;
        } else if (strlen(cStringFromstr)==1) {
            //字母
        }
    }
    return NO;
}

分隔字符串,分隔成n個元素的數組

NSString*string =@"sdfsfsfs-dfsdf";

NSArray *array = [string componentsSeparatedByString:@"-"]; 
NSLog(@"array:%@",array); 
//結果是adfsfsfs和dfsdf

漢字編碼

NSstring *str = [chineseName stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

去掉HTML標簽

-(NSString *)filterHTML:(NSString *)html
{
    NSScanner * scanner = [NSScanner scannerWithString:html];
    NSString * text = nil;
    while([scanner isAtEnd]==NO)
    {
        [scanner scanUpToString:@"<" intoString:nil];
        [scanner scanUpToString:@">" intoString:&text];
        html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
    }
    return html;
}

動態計算字串寬度、高度

// 動態計算文本寬度
+ (CGFloat)widthWithText:(NSString *)text andFontSize:(CGFloat)fontSize{
    CGRect rect =
    [text boundingRectWithSize:CGSizeMake(SCREEN_WIDTH, MAXFLOAT)
                       options:NSStringDrawingUsesLineFragmentOrigin
                    attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}
                       context:nil];
    return rect.size.width;
}

// 動態計算文本高度
+ (CGFloat)heightWithText:(NSString *)text andFontSize:(CGFloat)fontSize{
    CGRect rect =
    [text boundingRectWithSize:CGSizeMake(SCREEN_WIDTH - 100, MAXFLOAT)
                       options:NSStringDrawingUsesLineFragmentOrigin
                    attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}
                       context:nil];
    return rect.size.height;
}

計算字符串字符長度,一個漢字算兩個字符

-(NSUInteger) unicodeLengthOfString: (NSString *) text
{
    NSUInteger asciiLength = 0;
    for (NSUInteger i = 0; i < text.length; i++)
    {
        unichar uc = [text characterAtIndex: i];
        asciiLength += isascii(uc) ? 1 : 2;
    }
    return asciiLength;
}

字符串base64編碼

+ (NSString *)base64StringFromText:(NSString *)text {
    
    NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64String = [data base64EncodedStringWithOptions:0];
    return base64String;
}
/*  解碼 */
+ (NSString *)textFromBase64String:(NSString *)base64 {
    
    NSData *data = [[NSData alloc] initWithBase64EncodedString:base64 options:0];
    NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
    return text;
}

字符串解碼

NSString *result = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

對字符串進行UTF-8編碼:輸出UTF-8格式

[str  stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

字符串編碼

NSString *urll = self.URL;
    urll = [urll stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"%<>[\\]^`{|}\"]+"].invertedSet];
// 我們一般用這個方法處理stringByAddingPercentEscapesUsingEncoding但是這個方法好想不會處理/和&這種特殊符號,這種情況就需要用下邊這個方法處理
@implementation NSString (NSString_Extended)
- (NSString *)urlencode {
    NSMutableString *output = [NSMutableString string];
    const unsigned char *source = (const unsigned char *)[self UTF8String];
    int sourceLen = strlen((const char *)source);
    for (int i = 0; i < sourceLen; ++i) {
        const unsigned char thisChar = source[i];
        if (thisChar == ' '){
            [output appendString:@"+"];
        } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || 
                   (thisChar >= 'a' && thisChar <= 'z') ||
                   (thisChar >= 'A' && thisChar <= 'Z') ||
                   (thisChar >= '0' && thisChar <= '9')) {
            [output appendFormat:@"%c", thisChar];
        } else {
            [output appendFormat:@"%%%02X", thisChar];
        }
    }
    return output;
}

字典轉字符串

SData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];

NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

json字符串轉字典

+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString
{
    if (jsonString == nil) {
        return nil;
    }
    
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                        options:NSJSONReadingMutableContainers
                                                          error:&err];
    if(err)
    {
        NSLog(@"json解析失敗:%@",err);
        return nil;
    }
    return dic;
}

模型數組轉json字符串

    //先模型數組 轉 字典數組
    NSArray *dictArray = [PDcycleImageItem mj_keyValuesArrayWithObjectArray:_extraCycleImgArray];

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictArray options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

字符串替換

NSString*str =@"12345678";
NSString*Str2 = [str stringByReplacingOccurrencesOfString:@"345"withString:@"543"];

去除所有的空格、換行

可解決JSON字符串格式錯誤問題。

+ (NSString *)removeSpaceAndNewline:(NSString *)str {
    NSString *temp = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    temp = [temp stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    temp = [temp stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    return temp;
}

字符串拼接相關

1. 如果count不足2位 用0在最前面補全(2代表總輸出的個數)
NSInteger count = 5;
NSString *string = [NSString stringWithFormat:@"%02zd",count];
//輸出結果是: 05
2. 加百分號%
NSInteger count = 50;
//%是一個特殊符號 如果在NSString中用到%需要如下寫法
NSString *string = [NSString stringWithFormat:@"%zd%%",count];
//輸出結果是: 50%
3. 含雙引號:如果在NSString中用到"需要用\進行轉義
NSInteger count = 50;
NSString *string = [NSString stringWithFormat:@"%zd\"",count];
//輸出結果是: 50"

獲取字符串中的數字

    NSString *ssstr = @"額發發哦342.5范文芳個人房貸";
    NSCharacterSet* nonDigits =[[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    float num =[[ssstr stringByTrimmingCharactersInSet:nonDigits] floatValue];
    NSLog(@" num %.1f ",num);

截取某個字符串之后的字符串

      NSRange range = [aString rangeOfString:@"redirect="]; //現獲取要截取的字符串位置
      NSString *rurl = [aString substringFromIndex:range.location]; //截取字符串 
//--返回結果包含該字符串 :redirect=

截取兩個指定字符串中間的 字符串

    NSString *string = @"<a href=\"http\">這是要截取的內容</a>";

    NSRange startRange = [string rangeOfString:@"\">"];
    NSRange endRange = [string rangeOfString:@"</"];
    NSRange range = NSMakeRange(startRange.location + startRange.length, endRange.location - startRange.location - startRange.length);
    NSString *result = [string substringWithRange:range];
    NSLog(@"%@",result);

獲取字符串中的URL

正則表達式 的應用

+ (NSArray *)getURLFromString:(NSString *)string {
    
    NSError *error;
    //可以識別url的正則表達式
    NSString *regulaStr = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
    
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regulaStr
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    
    NSArray *arrayOfAllMatches = [regex matchesInString:string
                                                options:0
                                                  range:NSMakeRange(0, [string length])];
    
    NSMutableArray *arr=[[NSMutableArray alloc] init];
    
    for (NSTextCheckingResult *match in arrayOfAllMatches){
        NSString* substringForMatch;
        substringForMatch = [string substringWithRange:match.range];
        [arr addObject:substringForMatch];
    }
    return arr;
}

截取指定范圍的子串

NSString *str = @"今天天氣真不錯,是風和日麗的,我們下午沒有課,是心情也不錯";
        
    // 從x位置開始,到最后結束,包括x
    NSString *str1 = [str substringFromIndex:17];

    //從開始位置到指定位置x,不包括x
    NSString *str2 = [str substringToIndex:7];

    // 某個范圍內
    NSRange range = {7, 10};
    NSString *str3 = [str substringWithRange:range];
        
    NSRange range1 = [str rangeOfString:@"我們下午沒有課"];
    NSString *str4 = [str substringFromIndex:range1.location];

    //從某個字串的位置開始,到結尾
    NSUInteger loc1 = [str rangeOfString:@"/"].location + 1 ;
    NSString *result = [str substringFromIndex:loc1];

設置label富文本

// 創建Attributed  
NSMutableAttributedString *noteStr = [[NSMutableAttributedString alloc] initWithString:_label.text];  
// 改變的區間 
NSUInteger firstLoc = [[noteStr string] rangeOfString:@"金"].location + 1;  
NSUInteger secondLoc = [[noteStr string] rangeOfString:@"元"].location;   
NSRange range = NSMakeRange(firstLoc, secondLoc - firstLoc);
// 改變顏色  
[noteStr addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range]; 
// 改變字體大小及類型  
[noteStr addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Helvetica-BoldOblique" size:27] range:range];   

[_label setAttributedText:noteStr];    // 為label添加富文本 屬性

改變指定子串的顏色等

NSString *str0 = @"今天天氣非常的好,我們去玩吧,好不好。";
            
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:str0];

NSRange range0 = [str0 rangeOfString:@"非常的好"]; 

[attributedStr addAttribute:NSForegroundColorAttributeName value:MainThemeBlue range:range0]; 
             
_contentLb.attributedText = attributedStr;

文字中添加圖片

    //先實例化一個Lable
     ... ... 
  
    // 創建一個富文本
    NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:@"超時罰款24元/小時"];
    //  創建NSTextAttachment對象,用來裝圖片
    NSTextAttachment *attch = [[NSTextAttachment alloc] init];
    attch.image = [UIImage imageNamed:@"parking_caveat_normal"];
    attch.bounds = CGRectMake(0, 0, 15, 15);

    // 創建帶有圖片的富文本
    NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];

     // 在文字后面添加圖片
    [attri appendAttributedString:string];
    或
    // 在文字下標第幾個添加圖片  
    [attri insertAttributedString:string atIndex:0];   //0就是文字前添加圖片

    // 用label的attributedText屬性來使用富文本
    lable.attributedText = attri;

持續更新中... ...

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容