2014-03-28 114 views
-4

我需要拆分文本(的NSString)之间拆分文本,:目标C:看起来像这样的括号

[text],[more text here].

有没有办法做到这一点?我需要在一个String []中存储括号之间的两个文本,用“,”分隔。

+0

所以,你希望你的输出为'文字,更多的文字here'?作为单个字符串? – Abizern

+0

你可能不想使用C数组的字符串,而是使用'NSArray'。 – dave

+0

我试过使用componentSeparatedByString,但是效果不好...... – erickles

回答

1

您可以使用正则表达式和NSRegularExpression来解决此问题。

构建一个与括号内的文本匹配的模式。例如,模式@"\\[([^]]*)]"与开头支架\\[相匹配 - 需要使用反斜杠将括号视为文字字符,零个或多个字符,除了结尾括号[^]]*,文本如此以便参考([^]]*)以及结尾括号]。您可以建立一个与逗号分隔的括号文本序列匹配的模式,或者只是查找多个包围文本的匹配项 - 取决于您的要求。

创建正则表达式后,使用方法regularExpressionWithPattern:options:error:,可以使用方法matchesInString:options:range:获取所有匹配的数组。你可以处理这个数组来产生你需要的字符串数组。

+0

谢谢!实际上,我已经在iOS中搜索了正则表达式的概念,并且找出了如何去做! – erickles

0

如果你只是想打开@“[文字],[更多文字在这里]。”到@“文字,更多文字在这里”,那么你可以使用扫描仪。

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相当灵活,这是一个有用的技能就知道了。

0
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解决方案,或一个像它应该更加健壮,以确保在分割输入字符串时避免括号内的逗号。

-1

尝试......

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); 
相关问题