目标C:在括号之间拆分文本

时间:2014-03-28 19:17:50

标签: ios objective-c split

我需要拆分文本(NSString),如下所示:

[text],[more text here].

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

4 个答案:

答案 0 :(得分:1)

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

构造一个与括号内的文本匹配的模式。例如,模式@"\\[([^]]*)]"与左括号\\[匹配 - 需要使用反斜杠将括号视为文字字符,除了结束括号[^]]*之外的零个或多个字符,它引用了([^]]*)和结束括号]。您可以构建一个匹配逗号分隔的括号文本序列的模式,或者只查找括号内文本的多个匹配项 - 具体取决于您的要求。

使用方法regularExpressionWithPattern:options:error:创建正则表达式后,可以使用方法matchesInString:options:range:获取所有匹配项的数组。您可以处理此数组以生成所需的字符串数组。

答案 1 :(得分: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);

您可能认为这样做太过分了,但使用NSScanner非常灵活,而且这是一项非常有用的技能。

答案 2 :(得分: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解决方案或类似的解决方案应该更加健壮,以确保在拆分输入字符串时避免使用括号内的逗号。

答案 3 :(得分:-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);