Я хочу разбить NSString
на NSArray
. Например, данный:
NSString *[email protected]"ABCDEF";
Я хочу NSArray
как:
NSArray *myArray={A,B,C,D,E,F};
Как сделать это с помощью Objective-C и Cocoa?
Я хочу разбить NSString
на NSArray
. Например, данный:
NSString *[email protected]"ABCDEF";
Я хочу NSArray
как:
NSArray *myArray={A,B,C,D,E,F};
Как сделать это с помощью Objective-C и Cocoa?
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 и созвучным кластерам индикаторов, все они относятся к составному символу
Обратите внимание, что принятый ответ "проглатывает" 𝍱
и разбивает क्
на क
и ्
.
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];
}
Конверсия
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);
Это то, что консоль вернула
Эта ссылка содержит примеры для разбиения строки на массив на основе подстрок, а также на основе строк в наборе символов. Я надеюсь, что сообщение может вам помочь.
вот код 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];
}
Без цикла вы можете использовать это:
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>
для возврата массива
В Swift это становится очень простым.
Swift 3:
myString.characters.map { String($0) }
Swift 4:
myString.map { String($0) }
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: ", ")
Выход: "Карин, Кэрри, Дэвид"