比如我有一个 NSString 是 str = @"我就是测试一下" 或者 str = @"我" 。我想限制一定的字节长度。例如 byteLength = 10 。
我知道 subSrtring 不是 str.length=10 如何从 NSString 中获取一定字节长度的 subString,谢谢
Best Answer-推荐答案 strong>
您可以使用 dataUsingEncoding 方法从 NSString 获取 NSData 。然后使用 length 和 bytes 属性获取 byte length 或 bytes
那么如果 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);
结果:
小心:
- (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/
|