NSString к NSArray - PullRequest
       4

NSString к NSArray

11 голосов
/ 05 июля 2011

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

NSString *myString=@"ABCDEF";

Я хочу NSArray, как:

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

Как это сделать с Objective-C и какао?

Ответы [ 7 ]

24 голосов
/ 12 декабря 2012
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, который будет перечислять букву за буквой, но чувствителен к суррогатным парам, базовым символам плюс объединяющие метки, хангул джамо и указательным группам согласных , которые все обозначаются как составной символ

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

12 голосов
/ 01 апреля 2012

Conversion

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's the way they are separated in the string

Регистрация

NSLog(@"%@", array);

Console

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

11 голосов
/ 05 июля 2011
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];
}
4 голосов
/ 05 июля 2011

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

вот фрагмент кода

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];
}
1 голос
/ 12 декабря 2012

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

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> для возврата массива

0 голосов
/ 11 января 2019

Swift 4.2:

String to Array

let list = "Karin, Carrie, David"

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

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

Массив в строку

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

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

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

0 голосов
/ 21 июня 2017

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

Swift 3:

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

Swift 4:

myString.map { String($0) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...