我希望将NSString(ex. @"HELLO")
转换为NSArray(ex. [@"H", @"E", @"L", @"L", @"O", nil])
。
首先,我尝试使用componentsSeparatedByString
, 但它需要指定分隔符,所以我无法使用。那该怎么办呢?
我希望将NSString(ex. @"HELLO")
转换为NSArray(ex. [@"H", @"E", @"L", @"L", @"O", nil])
。
首先,我尝试使用componentsSeparatedByString
, 但它需要指定分隔符,所以我无法使用。那该怎么办呢?
将字符串拆分成数组的正确方法是按照以下步骤操作(作为一个NSString
类别方法):
@interface NSString (ConvertToArray)
-(NSArray *)convertToArray;
@end
@implementation NSString (ConvertToArray)
- (NSArray *)convertToArray {
NSMutableArray *arr = [[NSMutableArray alloc] init];
NSUInteger i = 0;
while (i < self.length) {
NSRange range = [self rangeOfComposedCharacterSequenceAtIndex:i];
NSString *chStr = [self substringWithRange:range];
[arr addObject:chStr];
i += range.length;
}
return arr;
}
@end
NSArray *array = [@"Hello " convertToArray];
NSLog(@"array = %@", array);
如果字符串包含Unicode字符\U10000
或更高版本,那么硬编码范围长度为1的解决方案将失败。这包括Emoji字符以及许多其他字符。
这是我的代码:
@interface NSString (ConvertToArray)
-(NSArray *)convertToArray;
@end
@implementation NSString (ConvertToArray)
-(NSArray *)convertToArray
{
NSMutableArray *arr = [[NSMutableArray alloc]init];
for (int i=0; i < self.length; i++) {
NSString *tmp_str = [self substringWithRange:NSMakeRange(i, 1)];
[arr addObject:[tmp_str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
return arr;
}
@end
:
- (void)foo
{
NSString *exString = @"HELLO";
NSArray *arr = [exString convertToArray];
for (NSString *str in arr) {
NSLog(@"%@\n",str);
}
}
\U10000
的Unicode字符,则此解决方案将无法正常工作。例如,尝试使用各种Emoji字符。 - rmaddyNSString *string = @"HELLO";
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < string.length; i ++) {
[array addObject:[NSString stringWithFormat:@"%c", [string characterAtIndex:i]]];
}
\UFFFF
的Unicode字符上根本不起作用。而且%c
格式说明符在\UFF
之外也不起作用。 - rmaddy