【问题标题】:NSString to NSArrayNSString 到 NSArray
【发布时间】:2011-09-28 14:43:41
【问题描述】:

我想将NSString 拆分为NSArray。例如,给定:

NSString *myString=@"ABCDEF";

我想要一个NSArray 喜欢:

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

如何用 Objective-C 和 Cocoa 做到这一点?

【问题讨论】:

  • 您希望如何处理由 UTF-16 字符组成的代理项对和字符?
  • 你应该接受答案

标签: iphone objective-c ios cocoa-touch 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 和印度辅音簇敏感,所有这些都称为组合字符

请注意,accepted answer“吞噬”? 并将क् 分解为

【讨论】:

【解决方案2】:

转化率

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);

这是控制台返回的内容

【讨论】:

  • 这个怎么样,如果你有 NSString *myString=@"ABCDEF"; 没有空格 ??
  • 你需要一些东西来分隔它。
  • 否则你可以使用'For循环'并将字符子串成字符串。
  • 好的,按照Yan.Kun的回答
【解决方案3】:
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];
}

【讨论】:

  • 这是一个幼稚的解决方案,它不处理代理对或组合字符,正如@JeremyP 在他对这个问题的评论中敏锐地提出的那样。另外,不要忘记在不使用 GC 或 ARC 时释放数组。
【解决方案4】:

This link 包含将字符串拆分为基于子字符串和字符集中字符串的数组的示例。希望这篇文章对你有所帮助。

这里是代码片段

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&lt;space&gt; 返回一个数组

【讨论】:

    【解决方案6】:

    Swift 4.2:

    字符串到数组

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

    输出:[“Karin”、“Carrie”、“David”]

    数组转字符串

    let list = ["Karin", "Carrie", "David"]
    
    let listStr = list.joined(separator: ", ")
    

    输出:“卡琳、嘉莉、大卫”

    【讨论】:

      【解决方案7】:

      在 Swift 中,这变得非常简单。

      斯威夫特 3:

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

      斯威夫特 4:

      myString.map { String($0) }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多