在Objective-C中将一个NSString拆分成一个数组

16

我该如何将字符串@"Hello"分割为以下两种形式之一:

  • C数组:'H', 'e', 'l', 'l', 'o'

或者:

  • Objective-C数组:@[@"H", @"e", @"l", @"l", @"o"]

1
请查看NSString get-characters如何从NSString获取单个字符的帖子。 - Parag Bafna
4个回答

38
如果您满意使用C数组的char类型,请尝试以下代码:
const char *array = [@"Hello" UTF8String];

如果你需要一个NSArray,可以尝试:

NSMutableArray *array = [NSMutableArray array];
NSString *str = @"Hello";
for (int i = 0; i < [str length]; i++) {
    NSString *ch = [str substringWithRange:NSMakeRange(i, 1)];
    [array addObject:ch];
}

array将包含每个字符作为其元素。


有没有一个命令可以替换数组中的字母?就像 [array replaceObjectAtIndex:0] 那样?如果我想要替换数组索引中的某些内容呢? - ytpm
3
使用-characterAtIndex:代替使用范围为1的子字符串。 - Jack Lawrence
你如何将非对象 char 添加到数组中? - user529758
使用以下代码循环遍历您的 const char *array 数组:for (int i; i < sizeof(array); i++) { doSomethingWith(array[i]); } - LenArt

9
尝试这个:

试试看:

- (void) testCode
{
    NSString *tempDigit = @"12345abcd" ;
    NSMutableArray *tempArray = [NSMutableArray array];
    [tempDigit enumerateSubstringsInRange:[tempDigit rangeOfString:tempDigit]
                                  options:NSStringEnumerationByComposedCharacterSequences
                               usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
            [tempArray addObject:substring] ;
        }] ;

    NSLog(@"tempArray = %@" , tempArray);
}

点赞因为能意识到UTF8并保持多字节字符(表情符号,带重音字符)在一起。 - Kyle Howells

4

您可以使用- (unichar)characterAtIndex:(NSUInteger)index方法来访问字符串中每个索引处的字符。

因此,

NSString* stringie = @"astring";
NSUInteger length = [stringie length];
unichar stringieChars[length];
for( unsigned int pos = 0 ; pos < length ; ++pos )
{
    stringieChars[pos] = [stringie characterAtIndex:pos];
}
// replace the 4th element of stringieChars with an 'a' character
stringieChars[3] = 'a';
// print the modified array you produced from the NSString*
NSLog(@"%@",[NSString stringWithCharacters:stringieChars length:length]);

有没有一个命令可以替换数组中的字母?就像 [array replaceObjectAtIndex:0] 那样?如果我想要替换数组索引中的某些内容呢? - ytpm
现在你有一个基本的C数组,可以逐个索引进行更改。我修改了我的答案以反映你添加的问题。 - Thomson Comer

0
一个名为user529758的用户提到,可以像C语言一样分割字符串:
const char *array = [@"Hello" UTF8String];

然后使用循环来执行:

for (int i = 0; i < sizeof(array); i++) {
  doSomethingWithCharacter(array[i]);
}

请记住,来自字符串的 const char *array 可能以终止字符串的 NUL 字符 '\0' 结尾,因此您的大小可能比可读字符的数量大 1。http://en.wikipedia.org/wiki/Ascii#ASCII_control_code_chart - LenArt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接