如何访问NSMutableString Objective-C中的字符

如何访问NSMutableString Objective-C中的字符,objective-c,nsmutablestring,Objective C,Nsmutablestring,我有一个名为MyMutableStr的NSMutableString实例,我想访问其索引7处的字符 例如: unsigned char cMy = [(NSString*) MyMutableStr characterAtIndex:7]; 我认为这是一种丑陋的方式;代码太多了 我的问题是:Objective-C中是否有更简单的方法来访问NSMutableString中的字符 例如,在C语言中,我们可以使用[]运算符访问字符串中的字符: unsigned char cMy = MyMutabl

我有一个名为MyMutableStr的
NSMutableString
实例,我想访问其索引7处的字符

例如:

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];
但请记住这一点(摘自):

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


正如其他人所说的特征索引:但有些事情你可能需要仔细考虑。 首先,您要处理一个可变字符串。你要小心避免它从你下面变出来。一种方法是创建一个不可变副本,并将其用于op


第二,你正在处理Unicode,所以你可能需要考虑规范化你的字符串以得到预组合的形式,因为一些视觉表示可能不止一个实际的uniCar。这通常是人们的绊脚石

characterAtIndex
返回一个
unichar
,而不是
无符号字符
[str characterAt:k]
不等同于
[str UTF8String][k]
。要了解这一点,请考虑前者的结果,如果索引
k
处的字符代码高于127。此外,
[str UTF8String]
str
在存在非ASCII字符(即代码在0-127之外的字符)时可能具有完全不同的“逻辑长度”。