创建于完成: 2018/02/05
总览: http://www.cnblogs.com/lancgg/p/8404975.html
字符串类 |
简介 |
字符码: Unicode
NSString 生成了无法更改
Foundation/NSString.h
|
NSString主要方法 |
(1)
Unicode字符串的操作
|
注: unichar是Unicode表现的一个字符的类型,不同于char
便利构造函数: 先自动呼出alloc的
- (id) initWithUTF8String: (const char*) bytes;
便利构造函数:
+ (id) stringWithUTF8String: (const char*) bytes;
|
用和C一样以'\0'结尾的字符串生成 |
- (__strong const char *) UTF8String; |
返回编码为UTF-8的C字符串指针 |
- (NSUInteger) length; |
返回字符串长度
不同于C,不能用来计算需要的大小
(# TODO: check [?])
|
- (unichar) characterAtIndex: (NSUInteger) index; |
获取第index个的Unicode字符 |
- (id) initWithCharacters: (const unichar *) characters length: (NSUInteger) length
便利构造函数:
+ (id) stringWithCharacters: length:
|
生成length长的以characters重复的字符串 |
- (void) getCharacters: (unichar *) buffer range: (NSRange) aRange |
把aRange指定的范围的字符串复制到buffer
注: 不会自动加'\0'
NSRange 开始位置和长度的结构体
buffer长度必须够
|
|
|
|
(2)
指定字符编码的变换
|
NSStringEncoding类型 |
指定字符码
如
NSASCIIStringEncoding
|
7位的ASCII字码 |
NSUTF8StringEncoding
|
Unicode字符的8位字码
UTF-8
|
NSMaxOsRomanStringEncoding
|
日语的8位EUC字码 |
NSShiftJISStringEncoding |
日语的8位shiftJIS字码 |
|
|
|
- (id) initWithCString: (const char *) nullTerminatedCString
encoding: (NSStringEncoding) encoding
便利构造函数:
+ (id) stringWithCString: encoding:
注: encoding表示data的生成方法,生成的对象的生成方法是Unicode
|
通过指定编码的以'\0'结尾的字符串生成
|
- (__strong const char *) cStringUsingEncoding: (NSStringEncoding) encoding |
指定字码来转换,无法转换会抛出例外
getCString:MaxLength:encoding: 可以直接放到准备好的内存里
|
- (id) initWithData: (NSData *) data encoding: (NSStringEncoding) encoding
注: encoding表示data的生成方法,生成的对象的生成方法是Unicode
|
通过以encoding字码写的data来生成
类似的有
initWithBytes:length:encoding:
|
- (NSData *) dataUsingEncoding: (NSStringEncoding) encoding
只获取长度:
lengthOfBytesUsingEncoding:
|
把受体的字符串通过encoding编码后返回NSData,
无法转换返回nil
|
- (BOOL) canBeConvertedToEncoding: (NSStringEncoding) encoding |
能不能被指定的字码转换
可以用
availableStringEncodings来查看当前环境可用的encoding
|
URL字符化
- (NSString *) stringByAddingPercentEscapesUsingEncoding: (NSStringEncoding) encoding
String化
stringByReplacingPercentEscapesUsingEncoding:
|
把受体根据encoding来%化,用在URL的字符串表达上
都在Foundation/NSURL.h
|
|
|
|
(3)
根据格式生成字符串
|
格式规则 |
格式规则和printf()里的一样
不同:
可用%@, NSString, 对象的description(NSString)
格式字符串也是NSString
注意: 用格式生成NSString时,格式修饰符的对象不会自动转型
|
- (id) initWithFormat: (NSString *) format, ...
便利构造函数:
stringWithFormat:
|
根据格式生成字符串
可变长度的参数, 最后加...
# TODO: Supply [10.2 可变长度的参数]
|
|
|
|
(4)
对比
|
NSComparisionResult |
enum _NSComparisionResult {
NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending
};
typedef NSInteger NSComparisionResult;
相同返回NSOrderedSame, 小返回NSOrderedDescending, 大返回NSOrderedAscending
|
- (NSComparisionResult) compare: (NSString *) aString |
字符串的比较, aString不能为nil
只是比较是否相同的话可用
- (BOOL) isEqualToString: (NSString *) aString
|
- (NSComparisionResult) caseInsensitiveCompare: (NSString *) aString |
无视大小写的比较
其他方法来比较的话用:compare:option:
|
- (NSComparisionResult) localizedStandardCompare: (NSString *) aString |
Mac的Finder里文件名排序相同的方法来比较 |
- (BOOL) isEqualToString: (NSString *) aString |
与指定NSString是否相同 |
- (BOOL) hasPrefix: (NSString *) aString
|
开头是否和aString相同(是否有指定前缀) |
- (BOOL) hasSuffix: (NSString *) aString |
结尾是否与aString相同 |
commonPrefixWithString:options: |
从开头取出相同的字符串 |
|
|
|
|
|
(5)
连接
|
- (NSString *) stringByAppendingString: (NSString *) astring |
把aString连接在最后 |
- (NSString *) stringByAppendingFormat: (NSString *) format, ... |
把根据格式生成的字符串连接在最后 |
|
|
|
|
|
(6)
子字符串
|
😂Objective-C都tm什么鬼,怎么啥都给命个怪名啊😂我他娘的意大利炮呢😂
- (NSString *) substringToIndex: (NSUInteger) anIndex |
获取从开头到anIndex-1位置的字符串 |
- (NSString *) substringFromIndex: (NSUInteger) anIndex |
获取从anIndex到结尾的字符串 |
- (NSString *) substringWithRange: (NSRange) aRange |
获取aRange指定范围的字符串 |
NSRange的说明 |
typedef struct _NSRange {
NSUInteger location; // 开头
NSUInteger length; //长度
} NSRange;
|
|
|
|
(7)
搜索与置换
|
- (NSRange) rangeOfString: (NSString *) aString |
搜索指定字符串在受体内的位置
不存在的话返回的location是NSNotFound, length为0
忽视大小写等用
rangeOfString:options:
|
搜索时支持正规表现, option: NSRegularExperssionSearch |
[str rangeOfString: @"[0-9]{3}+-[0-9]{4}" option: NSRegularExpressionSearch];
|
- (NSRange) lineRangeForRange: (NSRange) aRange |
指定行与位置,返回实际在字符串里的位置
@"第1行\n第2行\n第3行\n第4行\n"这样的
代表行的结尾的字符
\r或0x0d |
CR, Mac OS的行末 |
\n或0x0a |
LF, Unix类的行末 |
\r\n |
CRLF, Windows的行末 |
U+2028 |
Unicode的行末 |
U+2019 |
Unicode的段落结尾 |
|
|
|
- (NSString *) stringByReplacingCharactersInRange: (NSRange) range withString: (NSString *) replacement |
指定范围的字符用replacement来代替 |
- (NSString *) stringByReplacingOccurencesOfString: (NSString *) target withString: (NSString *) replacement |
用replacement替代所有的target |
|
|
|
|
|
|
|
|
|
|
|
|
|
(8)
大小写
|
- (NSString *) lowercaseString |
全大写 |
- (NSString *) uppercaseString |
全小写 |
- (NSString *) capitalizedString |
首字母大写,其他小写 |
|
|
|
(9)
数值的转换
|
doubleValue
floatValue
intValue
integerValue
boolValue 以Y, y, T, t开头或开头是非零数字(001, 1, 010都算非零数字)的返回YES
|
(10)
路径的操作
|
位置 Foundation/NSPathUtilities.h
参照根路径 NSHomeDirectory()
例: /github/mySample/math.m
- (NSString *) lastPathComponent |
获取最后一个路径元素
例子里的math.m
|
- (NSString *) stringByAppendingPathComponent: (NSString *) aStr |
在最后添加指定的路径元素 |
- (NSString *) stringByDeletingLastPathComponent |
删除最后一个路径元素
如果删除后是根路径,删除多余的'/'
|
- (NSString *) pathExtension |
获取文件后缀,没有后缀的返回空字符串
例里的"m"
|
- (NSString *) stringByAppendingPathExtension: (NSString *) aStr |
在最后增加文加后缀
不要'.', 自动添加
|
- (NSString *) stringByDeletingPathExtension |
删除后缀与'.'
没有后缀的不改动
|
- (BOOL) isAbsolutePath |
如果是绝对路径返回YES |
+ (NSString *) pathWithComponents: (NSArray *) components |
以数组元素来创建路径
要绝对路径的话第一个元素 @"\"
末尾加\的话最后一个元素 @""
|
- (NSArray *) pathComponents |
把路径分解成路径元素的数组
绝对路径第一个 @"\"
最后带\的最后一个@""
|
- (NSString *) stringByExpandingTildeInPath |
开头是~/...或者~name/...的,把第一个/前换成根路径
不是的不变
|
- (NSString *) stringByAbbreviatingWithTildeInPath |
开头是根路径的换成~ |
- (__strong const char *) fileSystemRepresentation
放入aStr内:
- (BOOL) getFileSystemRepresentation:maxLength:
|
用文件系统使用的字码来转换成C字符串
|
|
|
|
|
|
|
|
(11)
文件的输入输出
|
# TODO: Supply [s18 NSError]
- (id) initWithContentsOfFile: (NSString *) path
encoding: (NSStringEncoding) enc
error: (NSError **)error
便利的构造函数:
stringWithContentsOfFile:encoding:error:
|
从指定的path以enc字码读取文件并写入受体
如果无法读取, 释放受体返回nil, error指向详细信息
|
- (id) initWithContentsOfFile: (NSString *) path
usedEncoding: (NSStringEncoding) enc
error: (NSError **) error
|
和上一个一样,但是字码自动判定并且放入enc里 |
- (BOOL) writeToFile: (NSString *) path
atomically: (BOOL) useAuxiliaryFile
encoding: (NSStringEncoding) enc
error: (NSError **) error
|
把受体按enc转码写入path指定的文件里, 成功返回YES
atomically为YES的话,写在临时文件写入,成功后重命名为原文件,
不损坏原文件
失败的话返回NO, error指向错误详细信息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(12)
其他
|
- (id) init
便利的构造函数:
string
|
生成空字符串
用在NSMutableString才有实际意义(因为NSString一旦生成不能改变)
|
- (id) initWithString: (NSString *) aString |
根据aString生成字符串
参数也可以是NSMutableString的实例, 可变生成不变
|
- (NSString *) description |
NSObject处定义
NSString处为返回self, 也就是自己的字符串
|
- (id) propertyList |
# TODO: Supply [s13-3 propertyList]
|
- (NSArray *) componentsSeparatedByCharactersInSet:
(NSCharacterSet *) sep
|
以sep指定的字符集合内部的字符为分割符分割字符串并返回数组 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NSMutableString |
NSString的子类
生成 |
- (id) initWithCapacity: (NSUInteger) capacity
便利的构造函数:
stringWithCapacity:
|
指定容量
容量不够了会自动增加,所以不用严密的值
|
|
|
|
|
|
|
|
修改 |
- (void) appendString: (NSString *) aString |
在末尾插入aString |
- (void) appendFormat: (NSString *) format, ... |
根据格式生成字符串并插入在最后 |
- (void) insertString: (NSString *) aString
atIndex: (NSUInteger) loc
|
把aString插入到loc位置 |
- (void) deleteCharactersInRange: (NSRange) aRange |
删除aRange指定范围的字符串 |
- (void) setString: (NSString *) aString |
复制aString |
- (void) replaceCharactersInRange: (NSRange) aRange
withString: (NSString *) aString
|
用aString替换aRange指定范围的字符串 |
- (NSUInteger) replaceOccurencesOfString: (NSString *) target
withString: (NSString *) replacement
options: (NSStringComparisionOptions) opts
range: (NSRange) searchRange
|
searchRange范围内所有target都用replacement来替换
options可以指定NSRegularExperssionSearch来使用正则表达式
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|