iOS:NSString 使用杂记

来源:互联网 发布:java人才培训中心 编辑:程序博客网 时间:2024/05/29 21:31

********************拆分Separated********************

- (NSArray *)componentsSeparatedByString:(NSString *)separator; // 以string作为分割项- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator NS_AVAILABLE(10_5, 2_0);
注意NSCharacterSet不是字符串string的集合,是character的集合,详细参考辅助类 。
********************替换replace********************
// 在一定范围range、满足字符串比较方式 用字符串替换- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange NS_AVAILABLE(10_5, 2_0);// 字符串替换- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement NS_AVAILABLE(10_5, 2_0);// 一定范围内替换- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement NS_AVAILABLE(10_5, 2_0);
********************消减trim********************
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set  // removing set中的字符
例如去除空格等,stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]
********************补齐padding********************
- (NSString *)stringByPaddingToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex
注意方法中参数:newLength小于原string长度,string只保留length长度;padIndex表示从padString中哪个字符开始填充。例:
[@"abc" stringByPaddingToLength: 9 withString: @"." startingAtIndex:0];  // Results in "abc......"[@"abc" stringByPaddingToLength: 2 withString: @"." startingAtIndex:0];  // Results in "ab"[@"abc" stringByPaddingToLength: 9 withString: @". " startingAtIndex:1]; // Results in "abc . . ."(从空格开始补齐)   // Notice that the first character in the padding is " "
********************遍历********************???
character = [string substringWithRange:NSMakeRange(i, 1)];  i++;
转换为C字符串,用指针?

********************比较compare********************

--比较结果:枚举类型,NSComparisonResult:   // -1 升序; 0 相等;1 降序;

ypedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
--比较选项
NSCaseInsensitiveSearch ://大小写不敏感。“A”等同于“a”,然而在某些地方还有更复杂的情况。例如,在德国,“ß” 和 “SS”是等价的。 NSLiteralSearch ://Unicode 的点对 Unicode 点比较。它只在所有字符都用相同的方式组成的情况下才会返回相等。NSBackwardsSearch = 4 //在字符串的末尾开始反向搜索NSAnchoredSearch = 8,//只考虑搜索的起始点(单独使用)或终止点(当与 NSBackwardsSearch 结合使用时)。这个方法可以用来检查前缀或者后缀,以及大小写不敏感(case-insensitive)或者音调不敏感(diacritic-insensitive)的比较NSNumericSearch:它对字符串里的数字排序,所以 “Section 9” < “Section 20” < “Section 100.” //以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用    ,NSDiacriticInsensitiveSearch = 128,//音调不敏感. For example, ‘ö’ is equal to ‘o’.NSWidthInsensitiveSearch = 256,//一些东亚文字(平假名 和 片假名)有全宽与半宽两种形式NSForcedOrderingSearch = 512// 强制返回 NSOrderedAscending或者NSOrderedDescending,如果the strings are equivalent but not strictly equal.(例如如果相等,区分大小写返回结果)//以下定义高于 iphone 3.2 可用    ,NSRegularExpressionSearch = 1024//只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:方法。使用正则表达式搜索,如果设置此项,可以只可使用 NSCaseInsensitiveSearch 和 NSAnchoredSearch

--方法:

- (NSComparisonResult)compare:(NSString *)string;- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale; // locale arg used to be a dictionary pre-Leopard. We now accept NSLocale. Assumes the current locale if non-nil and non-NSLocale. nil continues to mean canonical compare, which doesn't depend on user's locale choice.- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;- (NSComparisonResult)localizedCompare:(NSString *)string; //using a localized comparison.This method uses the current locale- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;

      其中-localizedStandardCompare:,它排序的方式和 Finder 一样。它对应的选项是 NSCaseInsensitiveSearch、NSNumericSearch、NSWidthInsensitiveSearch 以及 NSForcedOrderingSearch。如果我们要在 UI 上显示一个文件列表,用它就最合适不过了。

备注

--1.大小写不敏感的比较和音调符号不敏感的比较都是相对复杂和昂贵的操作。如果我们需要比较很多次字符串那这就会成为一个性能上的瓶颈(例如对一个大的数据集进行排序),一个常见的解决方法是同时存储原始字符串和折叠字符串。例如,我们的Contact 类有一个正常的name 属性,在内部它还有一个foldedName 属性,它将自动在name变化时更新。那么我们就可以使用NSLiteralSearch 来比较name 的折叠版本。 NSString 有一个方法来创建折叠版本:

- (NSString *)stringByFoldingWithOptions:(NSStringCompareOptions)options locale:(NSLocale *)locale

********************计算size********************

       ios7以前,使用方法:sizeWithFont: constrainedToSize;ios7以后,使用方法:boundingRectWithSize:options:attributes:context

       前者size参数可以想象成一个测量字符串所占大小的容器,用字符串去填充这个容器,得到这个字符串的大小。

//=>如果size的width足够大、不管height多大(足够大、比较大、很小(小于1行高度)或者为0),计算出来string都是一行高度、宽度是实际长度;//=>如果size的width比较大、height不是足够大,计算出来string就是大小贴近size的大小(相当充满了整个容器,超过的部分没有计算在内。为什么说贴近呢,因为计算出来的大小宽高只会是字符串字宽度、行高的倍数);//=>如果size的width不是足够大,heigh足够大,计算说出来string长度就是width,高度就是字符串每行都是width长度所需的高度(如果width为0,width的值为最小的值,貌似等于一个字的宽度);
       后者参数多了一个特殊的就是option,关于option说明:
NSStringDrawingTruncatesLastVisibleLine = 1 << 5, // 如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略NSStringDrawingUsesLineFragmentOrigin = 1 << 0, // 绘制文本时使用 line fragement origin 而不是 baseline origin。NSStringDrawingUsesFontLeading = 1 << 1, // 计算行高时使用行距NSStringDrawingUsesDeviceMetrics = 1 << 3, // 计算布局时使用图元字形(而不是印刷字体)//NSStringDrawingUsesDeviceMetrics测试发现,有没有区别不大。//对于第二个,baseline origin和line fragement origin 的意思就是换不换行。1和3都跟2有关。//所以当option为0的时候,不管size为什么值,算的都是string,一行的宽高度。//如果option为NSStringDrawingUsesLineFragmentOrigin,表示要分行。如果size的width足够大,计算出来是string一行的宽高度。如果width不是足够大,计算出来string就是width的宽度,高度就是所需的高度(跟size的height无关了)。(备注如果width、height为0,表示无限大)//如果option为NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingTruncatesLastVisibleLine,只有当size的大小”容不下”string的时候,在字符串后面加上省略号时,string的大小(贴近size)
       注意使用boundingRectWithSize:options:attributes:context计算size时候,参数size很重要,options也很重要(例如计算高度折行);

0 0