如何的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];
这样做是使用characterAtIndex:
的方式,但你并不需要将其转换为NSString
指针,因为NSMutableString
是NSString
的子类。因此,它并不长,但如果你仍然不觉得舒服,我建议使用UTF8String
获得一个C串过,你可以使用迭代括号操作:
const char* cString= [MyMutableStr UTF8String];
char first= cString[0];
但是请记住,(取自NSString class reference):
返回的C字符串会自动释放,就像返回的对象被释放一样;如果需要将C字符串存储在创建C字符串的autorelease上下文之外,则应复制C字符串。
'[str characterAt:k]'不等于'[str UTF8String] [k]'。为了看到这一点,如果索引'k'处的字符的字符代码大于127,那么考虑前者的结果。另外,[str UTF8String]和'str'在存在时可能具有完全不同的“逻辑长度”非ASCII字符(即代码在0 - 127之外的字符)。 – Dirk
正如其他人所说characterAtIndex:但您可能需要仔细考虑一些事情。
首先你正在处理一个可变字符串。你要小心,以避免它从你下面改变。一种方法是对不可变的副本进行操作。
其次,你正在处理的Unicode,所以你可能要考虑规范化你的字符串来获得预合成的形式,因为一些可视化表示可能不止一个实际的unichar。这往往是人们的绊脚石。
'characterAtIndex'返回一个'unichar',而不是'unsigned char'。 – trudyscousin