在Objective-C中将NSArray转换为NSString

ale*_*rke 183 arrays objective-c nsstring nsarray

我想知道如何将NSArray 转换为Objective-C中[@"Apple", @"Pear ", 323, @"Orange"]的字符串.

Dav*_*ong 532

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)

  • 只是想在这里确定,但是`NSString*myString = [array componentsJoinedByString:@""];`这是一个可接受的替代品吗? (55认同)
  • @ 0x7fffffff:如果数组只包含"基本"类型,则相当于它.对于复杂类型,它将它们字符串化为"<ClassName:InstanceAddress>".`valueForKey`使它检索每个项目的指定属性.在这种情况下,`description`是来自`NSObject`的`NSString*`属性,其getter可以被其子类覆盖. (10认同)
  • @TechZen - 不,因为`[数组描述]`插入换行符和外括号. (8认同)

Jas*_*son 32

一种方法是迭代数组,description在每个项目上调用消息:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    [result appendString:[obj description]];
}
NSLog(@"The concatenated string is %@", result);
Run Code Online (Sandbox Code Playgroud)

另一种方法是根据每个项目的类做一些事情:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    if ([obj isKindOfClass:[NSNumber class]])
    {
        // append something
    }
    else
    {
        [result appendString:[obj description]];
    }
}
NSLog(@"The concatenated string is %@", result);
Run Code Online (Sandbox Code Playgroud)

如果你想要逗号和其他无关信息,你可以这样做:

NSString * result = [array description];
Run Code Online (Sandbox Code Playgroud)


小智 15

我认为Sanjay的答案几乎就在那里,但我用这种方式

NSArray *myArray = [[NSArray alloc] initWithObjects:@"Hello",@"World", nil];
NSString *greeting = [myArray componentsJoinedByString:@" "];
NSLog(@"%@",greeting);
Run Code Online (Sandbox Code Playgroud)

输出:

2015-01-25 08:47:14.830 StringTest[11639:394302] Hello World
Run Code Online (Sandbox Code Playgroud)

正如Sanjay所暗示的那样 - 我使用来自NSArray的方法componentsJoinedByString进行连接并返回给NSString

BTW NSString有反向方法componentsSeparatedByString,它执行拆分并返回NSArray.


Mar*_*rkP 10

我最近发现了一个关于Objective-C字符串的非常好的教程:

http://ios-blog.co.uk/tutorials/objective-c-strings-a-guide-for-beginners/

我认为这可能是有趣的:

如果要将字符串拆分为数组,请使用名为componentsSeparatedByString的方法来实现此目的:

NSString *yourString = @"This is a test string";
    NSArray *yourWords = [myString componentsSeparatedByString:@" "];

    // yourWords is now: [@"This", @"is", @"a", @"test", @"string"]
Run Code Online (Sandbox Code Playgroud)

如果你需要拆分一组几个不同的字符,请使用NSString的componentsSeparatedByCharactersInSet:

NSString *yourString = @"Foo-bar/iOS-Blog";
NSArray *yourWords = [myString componentsSeparatedByCharactersInSet:
                  [NSCharacterSet characterSetWithCharactersInString:@"-/"]
                ];

// yourWords is now: [@"Foo", @"bar", @"iOS", @"Blog"]
Run Code Online (Sandbox Code Playgroud)

但请注意,分隔符字符串不能为空.如果需要将字符串分隔为单个字符,只需遍历字符串的长度并将每个字符串转换为新字符串:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}
Run Code Online (Sandbox Code Playgroud)


小智 8

NSString * str = [componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)

然后你使用了dic或多个数组

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   
Run Code Online (Sandbox Code Playgroud)