• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何从 NSString 获取特定字节长度的子字符串

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:59:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

比如我有一个 NSStringstr = @"我就是测试一下" 或者 str = @"我" 。我想限制一定的字节长度。例如 byteLength = 10

我知道 subSrtring 不是 str.length=10 如何从 NSString 中获取一定字节长度的 subString,谢谢



Best Answer-推荐答案


您可以使用 dataUsingEncoding 方法从 NSString 获取 NSData。然后使用 lengthbytes 属性获取 byte lengthbytes

那么如果 NSData's length > 你的特定长度 你应该使用 + (id)dataWithBytesconst void *)bytes lengthNSUInteger)length; 方法获取一定长度的字节 NSData 你应该小心返回 NSData 可能无法被 NSString

解码

最后你可以使用 - (id)initWithDataNSData *)data encodingNSStringEncoding)encoding; 方法得到你想要的结果NSString p>

你可以使用下面的代码:

- (NSString *)fetchStringWithOriginalStringNSString *)originalString withByteLengthNSUInteger)length
{
    NSData* originalData=[originalString dataUsingEncoding:NSUTF8StringEncoding];
    const char *originalBytes = originalData.bytes;

    //make sure to use a loop to get a not nil string.
    //because your certain length data may be not decode by NSString
    for (NSUInteger i = length; i > 0; i--) {

        @autoreleasepool {
            NSData *data = [NSData dataWithBytesriginalBytes length:i];
            NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            if (string) {
                return string;
            }
        }

    }
    return @"";
}

你可以像这样调用上面的方法:

NSString* originalString= @"我就是测试一下";
NSString *string = [self fetchStringWithOriginalStringriginalString withByteLength:10];
NSData* stringData=[string dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"10 bytes string : %@ ; it only %i bytes",string,stringData.length);

结果: enter image description here

小心: - (id)initWithDataNSData *)data encodingNSStringEncoding)encoding; 可能返回 nil

正如苹果所说:- (id)initWithDataNSData *)data encodingNSStringEncoding)encoding; 返回:

An NSString object initialized by converting the bytes in data into Unicode characters using encoding. The returned object may be different from the original receiver. Returns nil if the initialization fails for some reason (for example if data does not represent valid data for encoding).

所以你应该使用 for 循环来获取可以通过 NSSting

解码的最近长度数据

关于ios - 如何从 NSString 获取特定字节长度的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18583655/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap