目标 C:在括号之间拆分文本
Posted
技术标签:
【中文标题】目标 C:在括号之间拆分文本【英文标题】:Objective C: split text between brackets 【发布时间】:2014-03-28 19:17:49 【问题描述】:我需要拆分文本(NSString),看起来像这样:
[text],[more text here].
有没有办法做到这一点?我需要将括号之间的两个文本存储在 String[] 中,用“,”分隔。
【问题讨论】:
所以你希望你的输出是text, more text here
?作为单个字符串?
您可能不想使用 C 字符串数组,而是使用 NSArray
。
我尝试使用 componentSeparatedByString,但效果不佳...
【参考方案1】:
您可以使用正则表达式和NSRegularExpression
来解决此问题。
构造一个匹配括号中的文本的模式。例如,模式@"\\[([^]]*)]"
匹配左括号\\[
- 需要反斜杠将括号视为文字字符,零个或多个字符(右括号[^]]*
除外),将文本分组以便引用([^]]*)
和右括号]
。您可以构建一个匹配逗号分隔的括号文本序列的模式,或者只查找括号文本的多个匹配项 - 取决于您的要求。
一旦你创建了正则表达式,使用regularExpressionWithPattern:options:error:
方法,matchesInString:options:range:
方法就可以用来获取所有匹配的数组。您可以处理此数组以生成所需的字符串数组。
【讨论】:
谢谢!实际上,我已经在 ios 中搜索了正则表达式的概念,并且我想出了如何去做!【参考方案2】:如果你只想转@"[text],[more text here]。"进入@"text, more text here",然后你可以使用扫描仪。
NSString *input = @"[text],[more text here]";
NSScanner *scanner = [NSScanner scannerWithString:input];
NSString *firstString;
NSString *secondString;
NSCharacterSet *openingBracketSet = [NSCharacterSet characterSetWithCharactersInString:@"["];
NSCharacterSet *closingBracketSet = [NSCharacterSet characterSetWithCharactersInString:@"]"];
while (![scanner isAtEnd])
// Scan the opening brace, discarding the result
[scanner scanString:@"[" intoString:NULL];
// Scan the first string
[scanner scanUpToCharactersFromSet:closingBracketSet intoString:&firstString];
// Scan to the second opening brace, discarding the result
[scanner scanUpToCharactersFromSet:openingBracketSet intoString:NULL];
[scanner scanString:@"[" intoString:NULL];
// Scan the second string
[scanner scanUpToCharactersFromSet:closingBracketSet intoString:&secondString];
NSString *result = [NSString stringWithFormat:@"%@, %@", firstString, secondString];
NSLog(@"result: %@", result);
你可能认为这有点过头了,但是使用 NSScanners 是相当灵活的,而且知道它是一项有用的技能。
【讨论】:
【参考方案3】:NSMutableArray * result = [NSMutableArray array];
NSArray * commaSeparatedParenthesizedStrings = [input componentsSeparatedByString:@","];
NSCharacterSet * bracketsToTrim = [NSCharacterSet characterSetWithCharactersInString:@"[]"];
forin (NSString * s in commaSeparatedParenthesizedStrings)
[result addObject:[s stringByTrimmingCharactersInSet:bracketsToTrim]];
请注意,此解决方案不考虑括号内的逗号,而且会从输入中删除所有括号,因此[[[[[]][[]]hello][][[[][][]][][], [[][[][]world[[]][[]][]]
将返回@[@"hello", @"world"]
上面的 NSScanner 解决方案,或者类似的解决方案,应该更加健壮,以确保在拆分输入字符串时避免括号内的逗号。
【讨论】:
【参考方案4】:试试这个……
NSString *testString = @"[more],[more te,xt here],[],[,,,,],[text3]";
NSArray *array = [testString componentsSeparatedByString:@"],["];
NSString *text = @"";
for (int i = 0; i < array.count; i++)
NSString *word = [array objectAtIndex: i];
NSString *aux = @"";
NSRange range;
if(i == 0)
range = NSMakeRange(1, word.length - 1);
else
aux = @",";
if(i == array.count - 1)
range = NSMakeRange(0, word.length - 1);
else
range = NSMakeRange(0, word.length);
aux = [aux stringByAppendingString:
[word substringWithRange:range]];
text = [text stringByAppendingString:aux];
NSLog(@"%@",text);
【讨论】:
以上是关于目标 C:在括号之间拆分文本的主要内容,如果未能解决你的问题,请参考以下文章
[原创]C++, 利用std::wifstream和std::getline方式对目标字符串进行拆分