如何的NSMutableString Objective-C的访问角色

问题描述:

我有NSMutableString一个实例调用MyMutableStr,我想在指数7如何的NSMutableString Objective-C的访问角色

访问它的字符例如:

unsigned char cMy = [(NSString*) MyMutableStr characterAtIndex:7]; 

我认为这是一个丑陋的方式;代码太多了。

我的问题是:在Objective-C中有更简单的方法来访问NSMutableString中的字符吗?

一样,在C语言中,我们可以通过访问一个字符串的字符[]操作:

unsigned char cMy = MyMutableStr[7]; 
+2

'characterAtIndex'返回一个'unichar',而不是'unsigned char'。 – trudyscousin

这样做是使用characterAtIndex:的方式,但你并不需要将其转换为NSString指针,因为NSMutableStringNSString的子类。因此,它并不长,但如果你仍然不觉得舒服,我建议使用UTF8String获得一个C串过,你可以使用迭代括号操作:

const char* cString= [MyMutableStr UTF8String]; 
char first= cString[0]; 

但是请记住,(取自NSString class reference):

返回的C字符串会自动释放,就像返回的对象被释放一样;如果需要将C字符串存储在创建C字符串的autorelease上下文之外,则应复制C字符串。

+0

'[str characterAt:k]'不等于'[str UTF8String] [k]'。为了看到这一点,如果索引'k'处的字符的字符代码大于127,那么考虑前者的结果。另外,[str UTF8String]和'str'在存在时可能具有完全不同的“逻辑长度”非ASCII字符(即代码在0 - 127之外的字符)。 – Dirk

正如其他人所说characterAtIndex:但您可能需要仔细考虑一些事情。

首先你正在处理一个可变字符串。你要小心,以避免它从你下面改变。一种方法是对不可变的副本进行操作。

其次,你正在处理的Unicode,所以你可能要考虑规范化你的字符串来获得预合成的形式,因为一些可视化表示可能不止一个实际的unichar。这往往是人们的绊脚石。