首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串拆分为数组,其中单个项可能包含分隔符。

将字符串拆分为数组,其中单个项可能包含分隔符。
EN

Stack Overflow用户
提问于 2014-08-12 20:20:10
回答 1查看 114关注 0票数 0

假设我有一个包含列表的NSString对象。列表中包括一些引号,其中包含分隔符。如何最好地将其分解成一个数组?

例如,用逗号分隔的姓名和电子邮件地址列表:

代码语言:javascript
运行
复制
"Bar, Foo" <foo@bar.com>, "Blow, Joe" <joe@Blow.com>

我找到了一个解决方案,但我想知道是否有一个更有效的解决方案。我的解决办法基本上是这样:

  • 首先,用引号将字符串解析为可变数组。
  • 对于具有奇数索引的数组项,请将逗号更改为标记。
  • 将可变数组合并回字符串。
  • 使用-componentsSeparatedByString将新字符串解析为数组。
  • 循环遍历数组,用逗号替换令牌。

似乎应该有一个NSString方法来实现这一点,但我没有找到。

不管它有什么价值,我的解决方案是:

代码语言:javascript
运行
复制
-(NSArray *)listFromString:(NSString *)originalString havingQuote:(NSString *)quoteChar separatedByDelimiter:(NSString *)delimiter {
    // First we need to parse originalString to replace occurrences of the delimiter with tokens.
    NSMutableArray *arrayOfQuotes = [[originalString componentsSeparatedByString:quoteChar] mutableCopy];
    for (int i=1; i<[arrayOfQuotes count]; i +=2) {
        //Replace occurrences of delimiter with a token
        NSString *stringToMassage = arrayOfQuotes[i];
        stringToMassage = [stringToMassage stringByReplacingOccurrencesOfString:delimiter withString:@"~~token~~"];
        arrayOfQuotes[i] = stringToMassage;
    }
    NSString *massagedString = [[arrayOfQuotes valueForKey:@"description"] componentsJoinedByString:quoteChar];
// Now we have a string with the delimiters replaced by tokens.

// Next we divide the string by the delimeter.
    NSMutableArray *massagedArray = [[massagedString componentsSeparatedByString:delimiter] mutableCopy];
// Finally, we replace the tokens with the quoteChar
    for (int i=0; i<[massagedArray count]; i++) {
        NSString *thisItem = massagedArray[i];
        thisItem = [thisItem stringByReplacingOccurrencesOfString:@"~~token~~" withString:delimiter];
        massagedArray[i] = thisItem;
    }
    return [massagedArray copy];
}
EN

回答 1

Stack Overflow用户

发布于 2014-08-12 21:59:17

你应该看看的不是NSString,而是NSScanner。创建一个NSScanner,它将以您想要的方式解析NSString。如果您知道某些字符永远不会出现,则可以将引号之间的逗号更改为其中一个字符,然后将字符串分解为数组,然后用逗号替换临时字符。您可能会创建一个NSScanner,如果您真正进入它,它将执行所有的解析工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25273394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档