如何从NSString中获取单个NSString字符

nod*_*nja 68 cocoa-touch objective-c nsstring

我想从NSString中的某个地方获取一个角色.我希望结果是一个NSString.

这是我用来在索引处获取单个字符的代码:

[[s substringToIndex:i] substringToIndex:1]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

Kri*_*kel 132

这也会将索引i处的字符检索为NSString,并且您只使用NSRange结构而不是额外的NSString.

NSString * newString = [s substringWithRange:NSMakeRange(i, 1)];
Run Code Online (Sandbox Code Playgroud)

  • 请务必查看下面没有人特别回答.我的解决方案将为大量unicode字符返回垃圾. (8认同)
  • 答案并不能说明全部。当您处理表情符号,肤色,变音符号和CJK字符时,NSString变得棘手。https://www.objc.io/issues/9-strings/unicode/揭示了怪异的NSString的更多细节。 (2认同)

jos*_*lmf 38

如果您只想从NSString中获取一个字符,可以试试这个.

- (unichar)characterAtIndex:(NSUInteger)index;
Run Code Online (Sandbox Code Playgroud)

像这样使用:

NSString *originalString = @"hello";
int index = 2;
NSString *theCharacter = [NSString stringWithFormat:@"%c", [originalString characterAtIndex:index-1]];
//returns "e".
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所需要的,谢谢 (3认同)

No *_*lar 23

您的建议仅适用于ASCII等简单字符.NSStrings存储unicode,如果你的角色是几个unichars,那么你最终可能会有胡言乱语.使用

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;
Run Code Online (Sandbox Code Playgroud)

如果你想确定你的角色有多少个unichars.我用它来逐步检查字符串以确定字符边界的出现位置.

完全unicode功能是一项工作,但取决于您使用的语言.我看到很多亚洲文字,所以大多数角色从一个空间溢出,所以我需要做的工作.