您的位置:首页 > 移动开发 > IOS开发

NSString各种玩转

2017-11-15 09:54 351 查看

NSString

字符串属性

//////////字符串属性//////////
NSString *str1 = @"string";

NSLog(@"长度:                   %ld", str1.length);
NSLog(@"描述:                   %@", str1.description);
NSLog(@"哈希地址:                %lu", (unsigned long)str1.hash);
NSLog(@"字符串对应下标字符:        %c", [str1 characterAtIndex:2]);
//输出:   长度:                   6
//输出:   描述:                   string
//输出:   哈希地址:                10152471993823965
//输出:   字符串对应下标字符:        r

字符串截取

//截取指定位置之后的字符串
- (NSString *)substringFromIndex:(NSUInteger)from;
//从0下标开始截取到指定位置的字符串
- (NSString *)substringToIndex:(NSUInteger)to;
//截取指定范围的字符串
- (NSString *)substringWithRange:(NSRange)range;
//截取字符串指定范围的字符
- (void)getCharacters:(unichar *)buffer range:(NSRange)range;

字符串比较

将两个字符串进行计较,返回NSComparisonResult枚举结果
比较结果:
NSComparisonResult说明
NSOrderedAscending升序
(左小右大)
NSOrderedSame相同 (内容相同)
NSOrderedDescending降序 (左大右小)
比较选项:
NSStringCompareOptions说明
NSCaseInsensitiveSearch不区分大小写比较
NSLiteralSearch区分大小写比较
NSBackwardsSearch从字符串末尾开始搜索
NSAnchoredSearch搜索限制范围的字符串
NSNumericSearch按照字符串里的数字为依据,算出顺序
NSDiacriticInsensitiveSearch忽略
"-" 符号的比较
NSWidthInsensitiveSearch忽略字符串的长度,比较出结果
NSForcedOrderingSearch忽略不区分大小写比较的选项
NSRegularExpressionSearch只能应用于
rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:...方法
//////////字符串比较//////////
//1.比较
- (NSComparisonResult)compare:(NSString *)string;
//2.比较(指定字符串,条件)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
//3.比较(指定字符串,条件,范围)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
//4.比较(指定字符串,条件,范围,本地化)
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(nullable id)locale;
//5.比较(不区分大小写)
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;

//6.本地化比较
- (NSComparisonResult)localizedCompare:(NSString *)string;
//7.本地化比较(不区分大小写)
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
//8.本地化比较(标准)
- (NSComparisonResult)localizedStandardCompare:(NSString *)string;

//9.判断两个字符串是否内容一致
- (BOOL)isEqualToString:(NSString *)aString;

字符串搜索

//////////搜索基本//////////
//1.是否包含前缀(以str开头)
- (BOOL)hasPrefix:(NSString *)str;
//2.是否包含后缀(以str结尾)
- (BOOL)hasSuffix:(NSString *)str;
//3.获取公共前缀
- (NSString *)commonPrefixWithString:(NSString *)str options:(NSStringCompareOptions)mask;
//4.是否包含字符串
- (BOOL)containsString:(NSString *)str;
//5.本地化是否包含字符串(不区分大小写)
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
//6.本地化是否包含字符串(标准)
- (BOOL)localizedStandardContainsString:(NSString *)str;
//7.本地化搜索字符串范围(标准)
- (NSRange)localizedStandardRangeOfString:(NSString *)str;

//////////搜索字符串//////////
//8.搜索(指定字符串)
- (NSRange)rangeOfString:(NSString *)searchString;
//9.搜索(指定字符串,条件)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;
//10.搜索(指定字符串,条件,范围)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
//11.搜索(指定字符串,条件,范围,本地化)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(nullable NSLocale *)locale;

//////////搜索字符集合//////////
//12.搜索(指定字符集合)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet;
//13.搜索(指定字符集合,条件)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:(NSStringCompareOptions)mask;
//14.搜索(指定字符集合,条件,范围)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

//15.用字符串的字符编码指定索引查找位置
- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;
//16.用字符串的字符编码指定区域段查找位置
- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range;

字符串拼接

//////////字符串拼接//////////
NSString *string = @"1";
NSString *appStr = @"2";
NSString *resultStr1 = [string stringByAppendingString:appStr];
NSString *resultStr2 = [string stringByAppendingFormat:@" + %@", appStr];

NSLog(@"普通拼接:     %@", resultStr1);
NSLog(@"格式化拼接:   %@", resultStr2);
//输出:   普通拼接:     12
//输出:   格式化拼接:   1 + 2

字符串基本类型转换

//////////字符串基本类型转换//////////
NSString *numStr = @"87234.2345";

NSLog(@"double型:        %f", numStr.doubleValue);
NSLog(@"float型:         %f", numStr.floatValue);
NSLog(@"int型:           %d", numStr.intValue);
NSLog(@"NSInteger型:     %ld", numStr.integerValue);
NSLog(@"long long型:     %lld", numStr.longLongValue);
NSLog(@"BOOL型:          %d", numStr.boolValue);
//输出:   double型:        87234.234500
//输出:   float型:         87234.234375
//输出:   int型:           87234
//输出:   NSInteger型:     87234
//输出:   long long型:     87234
//输出:   BOOL型:          1

字符串大小写转换

//////////字符串大小写转换//////////
NSString *string = @"string";

NSLog(@"大写:         %@", string.uppercaseString);
NSLog(@"小写:         %@", string.lowercaseString);
NSLog(@"首字母大写:    %@", string.capitalizedString);
//输出:   大写:         STRING
//输出:   小写:         string
//输出:   首字母大写:    String

//本地化(大写)
- (NSString *)uppercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(小写)
- (NSString *)lowercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(首字母大写)
- (NSString *)capitalizedStringWithLocale:(nullable NSLocale *)locale;

字符串分行,分段

//////////分行//////////
//1.指定范围,分行取字符串
- (void)getLineStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)lineEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//2.获取指定范围该行的范围
- (NSRange)lineRangeForRange:(NSRange)range;

//////////分段//////////
//3.指定范围,分段取字符串
- (void)getParagraphStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)parEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//4.获取指定范围该段落的范围
- (NSRange)paragraphRangeForRange:(NSRange)range;

//////////字符串分行,分段//////////
NSString *string = @"123 456\nABC,DEF\nabc.def";
//获取该行的范围(指定范围)
NSRange range1 = [string lineRangeForRange:NSMakeRange(0, 10)];
NSLog(@"%ld 行长度:     %ld", range1.location, range1.length);
//输出:       0 行长度:     16

//获取该段落范围(指定范围)
NSRange range2 = [string paragraphRangeForRange:NSMakeRange(0, 3)];
NSLog(@"%ld 段落长度:   %ld", range2.location, range2.length);
//输出:       0 段落长度:   8

字符串列举(按条件)

列举选项:<
d788
td>反向遍历
NSStringEnumerationOptions说明
NSStringEnumerationByLines按行
NSStringEnumerationByParagraphs按段落
NSStringEnumerationByComposedCharacterSequences按字符顺序
NSStringEnumerationByWords按单词,字
NSStringEnumerationBySentences按句子
NSStringEnumerationReverse
NSStringEnumerationSubstringNotRequired不需要子字符串
NSStringEnumerationLocalized本地化
//////////字符串列举//////////
NSString *string = @"123456\nABCDEF\nabcdef
//1.列举(按行)
[string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
NSLog(@"每行:   %@", line);
}];
//输出:    每行:   123456
//输出:    每行:   ABCDEF
//输出:    每行:   abcdef

//2.列举(范围,条件)
[string enumerateSubstringsInRange:NSMakeRange(5, 10) options:NSStringEnumerationByLines usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {

NSLog(@"%@", substring);
NSLog(@"%ld   %ld", substringRange.location, substringRange.length);
NSLog(@"%ld   %ld", enclosingRange.location, enclosingRange.length);

}];
//输出:   6
//输出:   5 1
//输出:   5 2

//输出:   ABCDEF
//输出:   7   6
//输出:   7   7

//输出:   a
//输出:   14   1
//输出:   14   1

字符串编码和转换

//////////字符串编码和转换//////////
NSString *string = @"string";

NSLog(@"最快编码值(枚举):      %lu", (unsigned long)string.fastestEncoding);
NSLog(@"最小编码值(枚举):      %lu", (unsigned long)string.smallestEncoding);
NSLog(@"UTF8编码值:           %s", string.UTF8String);
//输出:     最快编码值(枚举):      1
//输出:     最小编码值(枚举):      1
//输出:     UTF8编码值:           string
//1.选择编码,是否允许有损编码
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
//2.选择编码
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
//3.判断是否可以无损编码
- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;

//4.C字符编码转换
- (nullable __strong const char *)cStringUsingEncoding:(NSStringEncoding)encoding;
//5.判读C字符转化是否可以成功
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
//6.指定缓存区转换
- (BOOL)getBytes:(nullable void *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(nullable NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(nullable NSRangePointer)leftover;

//7.对字符串进行编码时所需的最大字节数
- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
//8.对字符串进行编码时所需的字节数
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;

//9.可用字符串编码
+ (const NSStringEncoding *)availableStringEncodings;
//10.本地化编码名称
+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;
//11.默认C字符串编码
+ (NSStringEncoding)defaultCStringEncoding;

字符串分割

字符集合:
NSCharacterSet说明
controlCharacterSet控制符
whitespaceCharacterSet空格符
whitespaceAndNewlineCharacterSet空格换行符
decimalDigitCharacterSet小数
letterCharacterSet文字
lowercaseLetterCharacterSet小写字母
uppercaseLetterCharacterSet大写字母
nonBaseCharacterSet非基础
alphanumericCharacterSet数字字母
decomposableCharacterSet可分解
illegalCharacterSet非法
punctuationCharacterSet标点
capitalizedLetterCharacterSet大写
symbolCharacterSet符号
newlineCharacterSet换行符
//////////字符串分割//////////
NSString *string = @"A_B_c_D_E_F";

//分割(指定字符串)
NSArray *resultArr1 = [string componentsSeparatedByString:@"_"];
NSLog(@"%@", resultArr1);
//输出:   (A, B, c, D, E, F)

//分割(指定字符集合)
NSArray *resultArr2 = [string componentsSeparatedByCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", resultArr2);
//输出:   ("A_B_" , "_D_E_F")

字符串操作(修剪,填充,折叠,替换)

NSString *string = @"3EWRs a;af";

//////////修剪//////////
NSString *result1 = [string stringByTrimmingCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", result1);
//输出:   3EWRs a;

//////////填充//////////
NSString *result2 = [string stringByPaddingToLength:20 withString:@"填充" startingAtIndex:1];
NSLog(@"%@", result2);
//输出:   3EWRs a;af充填充填充填充填充填

//////////折叠//////////
NSString *result3 = [string stringByFoldingWithOptions:NSNumericSearch locale:[NSLocale systemLocale]];
NSLog(@"%@", result3);
//输出:   3EWRs a;af

//////////替换//////////
//替换(指定字符串)
NSString *result4 = [string stringByReplacingOccurrencesOfString:@" " withString:@"替换"];
NSLog(@"%@", result4);
//输出:   3EWRs替换a;af

//替换(指定字符串,条件,范围)
NSString *result5 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"替换" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length - 2)];
NSLog(@"%@", result5);
//输出:   3EWRs 替换;af

//替换(指定范围)
NSString *result6 = [string stringByReplacingCharactersInRange:NSMakeRange(0, string.length) withString:@"替换"];
NSLog(@"%@", result6);
//输出:   替换

字符串翻译

翻译选项:
翻译选择说明
NSStringTransformLatinToKatakana拉丁->片假名
NSStringTransformLatinToHiragana拉丁->平假名
NSStringTransformLatinToHangul拉丁->韩语
NSStringTransformLatinToArabic拉丁->阿拉伯语
NSStringTransformLatinToHebrew拉丁->希伯来语
NSStringTransformLatinToThai拉丁->泰国
NSStringTransformLatinToCyrillic拉丁->西里尔字母
NSStringTransformLatinToGreek拉丁->希腊
NSStringTransformToLatin拉丁
NSStringTransformMandarinToLatin普通话->拉丁
NSStringTransformHiraganaToKatakana平假名->片假名
NSStringTransformFullwidthToHalfwidth全角->半角
NSStringTransformToXMLHexXML16进制
NSStringTransformToUnicodeNameUnicode名
NSStringTransformStripCombiningMarks结合地带商标
NSStringTransformStripDiacritics带音符
//////////字符串翻译//////////
NSString *dalian = @"大连";
NSString *result = [dalian stringByApplyingTransform:NSStringTransformMandarinToLatin reverse:NO];

NSLog(@"%@", result);
//输出:   dà lián

字符串写入

//////////字符串写入//////////
//写入到指定路径,编码的文件中
[string writeToFile:@"/Users/Desktop/LuisX.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

//写入到指定URL,编码的文件中
[string writeToURL:[NSURL URLWithString:@"file://LuisX.text"] atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSMutableString

继承自NSString
NSString中的方法在NSMutableString都可以使用
NSMutableString是动态的字符串,可以动态的添加,修改,删除等

可变字符串分配容量

提前指定的容量,知识用于内存优化,实际大小可以大于设置的容量capacity
//////////字符串分配容量//////////

//1.初始化容量为Capacity大小的字符串  (需要手动释放内存)
NSMutableString *mutableStr1 = [[NSMutableString alloc] initWithCapacity:20];

//2.初始化容量为Capacity大小的字符串  (不需要手动释放内存)
NSMutableString *mutableStr2 = [NSMutableString stringWithCapacity:20];

可变字符串扩展方法

NSMutableString *str = [NSMutableString stringWithString:@"string"];

//////////插入//////////
[str insertString:@"123" atIndex:2];
NSLog(@"%@", str);
//输出:   st123ring

//////////删除//////////
[str deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"%@", str);
//输出:   st3ring

//////////拼接//////////
[str appendString:@"456"];
NSLog(@"%@", str);
//输出:   st3ring456

//////////格式化拼接//////////
[str appendFormat:@"7 89"];
NSLog(@"%@", str);
//输出:   st3ring4567 89

//////////设置新字符串//////////
[str setString:@"string"];
NSLog(@"%@", str);
//输出:   string

//////////字符串替换//////////
//1.指定范围替换
[str1 replaceCharactersInRange:NSMakeRange(2, 2) withString:@"123"];
NSLog(@"%@", str1);
//输出:   st123ng

//2.指定字符串,条件,范围替换
[str1 replaceOccurrencesOfString:@"123" withString:@"--" options:NSRegularExpressionSearch range:NSMakeRange(0, str1.length)];
NSLog(@"%@", str1);
//输出:   st--ng


作者:LuisX
链接:http://www.jianshu.com/p/d3f343b71cc2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS nsstring