NSString для NSArray

Я хочу разбить NSString на NSArray. Например, данный:

NSString *[email protected]"ABCDEF";

Я хочу NSArray как:

NSArray *myArray={A,B,C,D,E,F};

Как сделать это с помощью Objective-C и Cocoa?

Ответ 1

NSMutableArray *letterArray = [NSMutableArray array];
NSString *letters = @"ABCDEF𝍱क्";
[letters enumerateSubstringsInRange:NSMakeRange(0, [letters length]) 
                            options:(NSStringEnumerationByComposedCharacterSequences) 
                         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    [letterArray addObject:substring];
}];

for (NSString *i in letterArray){
    NSLog(@"%@",i);
}

приводит к

A
B
C
D
E
F
𝍱
क्

enumerateSubstringsInRange:options:usingBlock: , доступный для iOS 4 +, может перечислять строку с разными стилями. Один из них называется NSStringEnumerationByComposedCharacterSequences, что будет перечислять буквой по букве, но чувствительно к суррогатным парам, базовым символам плюс комбинации меток, Hangul jamo и созвучным кластерам индикаторов, все они относятся к составному символу

Обратите внимание, что принятый ответ "проглатывает" 𝍱 и разбивает क् на и .

Ответ 2

NSMutableArray *chars = [[NSMutableArray alloc] initWithCapacity:[theString length]];
for (int i=0; i < [theString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%C", [theString characterAtIndex:i]];
    [chars addObject:ichar];
}

Ответ 3

Конверсия

NSString * string = @"A B C D E F";
NSArray * array = [string componentsSeparatedByString:@" "];
//Notice that in this case I separated the objects by a space because that the way they are separated in the string

Logging

NSLog(@"%@", array);

Console

Это то, что консоль вернула

Ответ 4

Эта ссылка содержит примеры для разбиения строки на массив на основе подстрок, а также на основе строк в наборе символов. Я надеюсь, что сообщение может вам помочь.

вот код snip

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];
}

Ответ 5

Без цикла вы можете использовать это:

NSString *myString = @"ABCDEF";
NSMutableString *tempStr =[[NSMutableString alloc] initWithString:myString];

if([myString length] != 0)
{
    NSError  *error  = NULL;

    // declare regular expression object
    NSRegularExpression *regex =[NSRegularExpression regularExpressionWithPattern:@"(.)" options:NSMatchingReportCompletion error:&error];

    // replace each match with matches character + <space> e.g. 'A' with 'A '
    [regex replaceMatchesInString:tempStr options:NSMatchingReportCompletion range:NSMakeRange(0,[myString length]) withTemplate:@"$0 "];

    // trim last <space> character
    [tempStr replaceCharactersInRange:NSMakeRange([tempStr length] - 1, 1) withString:@""];

    // split into array
    NSArray * arr = [tempStr componentsSeparatedByString:@" "];

    // print
    NSLog(@"%@",arr);
}

Это решение добавляет пространство перед каждым символом с помощью регулярного выражения и использует componentsSeparatedByString с <space> для возврата массива

Ответ 6

В Swift это становится очень простым.

Swift 3:

myString.characters.map { String($0) }

Swift 4:

myString.map { String($0) }

Ответ 7

Swift 4.2:

Строка в массив

let list = "Karin, Carrie, David"

let listItems = list.components(separatedBy: ", ")

Выход: ["Карин, Кэрри, Дэвид"]

Array to String

let list = ["Karin, Carrie, David"]

let listStr = list.joined(separator: ", ")

Выход: "Карин, Кэрри, Дэвид"