Objective-C NSString/NSMutableString

创建于完成: 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或0x0dCR, Mac OS的行末
\n或0x0aLF, Unix类的行末
\r\nCRLF, Windows的行末
U+2028Unicode的行末
U+2019Unicode的段落结尾
  

 

 - (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来使用正则表达式

  
  
  

 

  
  
  
  
  
  
  
  

 

  
  
  
  
  
  
  

转载于:https://www.cnblogs.com/lancgg/p/8419371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值