iOS 关于NSString的部分扩展 部分总结

xiaoxiao2021-02-27  174

类目:非正式协议(类目名)对一个类(原有类-什么都没有)方法的扩展(注:只允许添加方法不允许添加变量)

        1、命名规则:类名+类目的名称(要扩展的哪一个方向)

        2、什么时候使用类目

             ①、团队开发同一个任务(同一个类),又想不互相影响->就可以使用类目

            ②、扩展系统类里面的方法->OC是不开源的不能修改原有类的.m文件增加方法实现->使用类目

      3、调用的时候使用原有类去调用(类方法-原有类的类名调用)(对象方法-原有类的对象调用)

      4、创建一个类目-> command+N ->object-c file -> category ->第一个输入内容:类目的名字第二个输入的内容:要扩展的类

   

// 判断是否是 emoji表情 - (BOOL)isEmoji { BOOL returnValue = NO; const unichar hs = [self characterAtIndex:0]; // surrogate pair if (0xd800 <= hs && hs <= 0xdbff) { if (self.length > 1) { const unichar ls = [self characterAtIndex:1]; const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f) { returnValue = YES; } } } else if (self.length > 1) { const unichar ls = [self characterAtIndex:1]; if (ls == 0x20e3) { returnValue = YES; } } else { // non surrogate if (0x2100 <= hs && hs <= 0x27ff) { returnValue = YES; } else if (0x2B05 <= hs && hs <= 0x2b07) { returnValue = YES; } else if (0x2934 <= hs && hs <= 0x2935) { returnValue = YES; } else if (0x3297 <= hs && hs <= 0x3299) { returnValue = YES; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) { returnValue = YES; } } return returnValue; } /** * 得到文字和字体就能计算文字尺寸 * * @param text 需要计算尺寸的文字 * @param font 文字的字体 * @param maxW 最大的宽度 * * @return */ - (CGSize)sizeWithFont:(UIFont *)font maxW:(CGFloat)maxW { NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; attrs[NSFontAttributeName] = font; CGSize maxSize = CGSizeMake(maxW, MAXFLOAT); NSLog(@"IOS7以上的系统"); return [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size; } - (CGSize)sizeWithFont:(UIFont *)font { return [self sizeWithFont:font maxW:MAXFLOAT]; } //适合的高度 默认 systemFontOfSize:font - (CGFloat)heightWithFont:(NSInteger)font w:(CGFloat)w { return [self boundingRectWithSize:CGSizeMake(w, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:font] } context:nil].size.height; } //适合的宽度 默认 systemFontOfSize:font - (CGFloat)widthWithFont:(NSInteger)font h:(CGFloat)h { return [self boundingRectWithSize:CGSizeMake(MAXFLOAT, h) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:font] } context:nil].size.width; } //去空格 - (NSString *)delSpace { return [self stringByReplacingOccurrencesOfString:@" " withString:@""]; } //去空格 - (NSString *)delBlank { return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; } //转为 base64string后的Data - (NSData *)base64Data { return [[NSData alloc] initWithBase64EncodedString:self options:0]; } // 转为 base64String - (NSString *)base64Str { return [[self dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; } //解 base64为Str 解不了就返回原始的数值 - (NSString *)decodeBase64 { NSString *WillDecode = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:self options:0] encoding:NSUTF8StringEncoding]; return (WillDecode.length != 0) ? WillDecode : self; } //按字符串的,逗号分割为数组 - (NSArray *)combinArr { if ([self hasSuffix:@","]) { return [[self substringToIndex:self.length - 1] componentsSeparatedByString:@","]; } return [self componentsSeparatedByString:@","]; } //是否包含对应字符 - (BOOL)containStr:(NSString *)subString { return ([self rangeOfString:subString].location == NSNotFound) ? NO : YES; } //拼上字符串 - (NSString *)addStr:(NSString *)string { if (!string || string.length == 0) { return self; } return [self stringByAppendingString:string]; } - (NSString *)addInt:(int)string { return [self stringByAppendingString:@(string).stringValue]; } //32位MD5加密 - (NSString *)MD5 { const char *cStr = [self UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5(cStr, (CC_LONG) strlen(cStr), digest); NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [result appendFormat:@"x", digest[i]]; } return [result copy]; } //SHA1加密 - (NSString *)SHA1 { const char *cStr = [self UTF8String]; NSData *data = [NSData dataWithBytes:cStr length:self.length]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes, (CC_LONG) data.length, digest); NSMutableString *result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) { [result appendFormat:@"x", digest[i]]; } return [result copy]; } /** 中文转拼音 */ - (NSString *)pinYinWithString:(NSString *)chinese { NSString * pinYinStr = [NSString string]; if (chinese.length){ NSMutableString * pinYin = [[NSMutableString alloc]initWithString:chinese]; //1.先转换为带声调的拼音 if(CFStringTransform((__bridge CFMutableStringRef)pinYin, 0, kCFStringTransformMandarinLatin, NO)) { NSLog(@"pinyin: %@", pinYin); } //2.再转换为不带声调的拼音 if (CFStringTransform((__bridge CFMutableStringRef)pinYin, 0, kCFStringTransformStripDiacritics, NO)) { NSLog(@"pinyin: %@", pinYin); //3.去除掉首尾的空白字符和换行字符 pinYinStr = [pinYinStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //4.去除掉其它位置的空白字符和换行字符 pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\r" withString:@""]; pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\n" withString:@""]; pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@" " withString:@""]; } } return pinYinStr; } -(NSString*)encodeString{ // CharactersToBeEscaped = @":/?&=;+!@#$()~',*"; // CharactersToLeaveUnescaped = @"[]."; NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8)); return encodedString; } //URLDEcode -(NSString *)decodeString { //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]; NSString *decodedString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)self, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); return decodedString; } //计算字符串长度 1中文2字符 - (int)textLength { float number = 0.0; for (int index = 0; index < [self length]; index++) { NSString *character = [self substringWithRange:NSMakeRange(index, 1)]; if ([character lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) { number = number + 2; } else { number = number + 1; } } return ceil(number); } //限制最大显示长度 - (NSString *)limitMaxTextShow:(NSInteger)limit { NSString *Orgin = [self copy]; for (NSInteger i = Orgin.length; i > 0; i--) { NSString *Get = [Orgin substringToIndex:i]; if (Get.textLength <= limit) { return Get; } } return self; } //邮箱格式验证 - (BOOL)validateEmail { NSString *emailRegex = @"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:self]; } //验证是否ASCII码 - (BOOL)isASCII { NSCharacterSet *cs; cs = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@/:;()¥「」!,.?<>£"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\"/" ""]; NSRange specialrang = [self rangeOfCharacterFromSet:cs]; if (specialrang.location != NSNotFound) { return YES; } return NO; } //验证是含本方法定义的 “特殊字符” - (BOOL)isSpecialCharacter { NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」!,.?<>£"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\"/" ""]; NSRange specialrang = [self rangeOfCharacterFromSet:set]; if (specialrang.location != NSNotFound) { return YES; } return NO; } // 验证是否是数字 - (BOOL)isNumber { NSCharacterSet *cs; cs = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; NSRange specialrang = [self rangeOfCharacterFromSet:cs]; if (specialrang.location != NSNotFound) { return YES; } return NO; } // 验证字符串里面是否都是数字 - (BOOL)isPureNumber { NSUInteger length = [self length]; for (float i = 0; i < length; i++) { // NSString * c=[mytimestr characterAtIndex:i]; NSString *STR = [self substringWithRange:NSMakeRange(i, 1)]; NSLog(@"%@", STR); if ([STR isNumber]) { continue; } else { return NO; } } return YES; } //去掉 表情符号 - (NSString *)disableEmoji { NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil]; NSString *modifiedString = [regex stringByReplacingMatchesInString:self options:0 range:NSMakeRange(0, [self length]) withTemplate:@""]; return modifiedString; } 平时多总结,总会有用到的时候。

转载请注明原文地址: https://www.6miu.com/read-12958.html

最新回复(0)