gpt4 book ai didi

iphone - (#゚Д゚) 是一个 5 个字母的单词。但是在 iOS 中,[@"(# ゚Д゚)"length] 是 7。为什么?

转载 作者:可可西里 更新时间:2023-11-01 03:47:23 24 4
gpt4 key购买 nike

(# ゚Д゚) 是一个 5 个字母的单词。但是在iOS中,[@"(#゚Д゚)"长度]是7。

  1. 为什么?

  2. 我正在使用 <UITextInput>修改 UITextField 中的文本或 UITextView .当我制作 5 个字符长度的 UITextRange 时,它​​可以覆盖 (#゚Д゚) 。那么,为什么这个 (# ゚Д゚) 在 UITextField 中看起来像一个 5 个字符的单词?和 UITextView , 但在 NSString 中看起来像一个 7 个字符的单词???

  3. 在这种情况下,如何获得字符串的正确长度?

最佳答案

1) 正如评论中的许多人已经指出的那样,您的字符串由 5 个组成的字符序列(或字符簇,如果您愿意)组成。当 unichar 分解为 NSStringlength 方法时,你会得到一个 7,这是 unichar 在内存中表示您的字符串所需的代码。

2) 显然 UITextFieldUITextView 正在以 unichar 精明的方式处理字符串。好消息,你也可以。参见#3。

3) 您可以使用一些正确处理组合字符序列的 NSString API 来获取组合字符序列的数量。我快速制作的一个简单示例是一个小的 NSString 类别:

@implementation NSString (ComposedCharacterSequences_helper)
-(NSUInteger)numberOfComposedCharacterSequences{
__block NSUInteger count = 0;
[self enumerateSubstringsInRange:NSMakeRange(0, self.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
NSLog(@"%@",substring); // Just for fun
count++;
}];
return count;
}
@end

同样,这是快速代码;但它应该让你开始。如果你这样使用它:

NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);

您会看到您得到了想要的结果。

要深入了解 NSString API,请查看 WWDC 2012 Session 215 视频“文本和语言分析”

关于iphone - (#゚Д゚) 是一个 5 个字母的单词。但是在 iOS 中,[@"(# ゚Д゚)"length] 是 7。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com