目标C:在括号内分割文本
我需要分割文本(NSString),看起来像这样:
[text],[more text here].
有没有办法做到这一点? 我需要在一个String []中存储括号之间的两个文本,用“,”分隔。
你可以使用正则expression式和NSRegularExpression
来解决这个问题。
构build一个匹配括号内文本的模式。 例如,模式@"\\[([^]]*)]"
匹配左括号\\[
– 需要使用反斜杠将括号视为文字字符,除括号外的零个或多个字符[^]]*
,文本所指的组([^]]*)
,以及右括号。 你可以build立一个与逗号分隔的支架文本序列相匹配的模式,或者只是查找多个包围文本的匹配 – 取决于你的要求。
一旦创build了正则expression式,使用方法regularExpressionWithPattern:options:error:
matchesInString:options:range:
方法matchesInString:options:range:
可以用来获取所有匹配的数组。 你可以处理这个数组来产生你需要的string数组。
如果你只想把@“[文字],[更多文字在这里]”。 进入@“文字,这里更多的文字”,然后你可以使用扫描仪。
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是非常灵活的,这是一个有用的技能知道。
NSMutableArray * result = [NSMutableArray array]; NSArray * commaSeparatedParenthesizedStrings = [input componentsSeparatedByString:@","]; NSCharacterSet * bracketsToTrim = [NSCharacterSet characterSetWithCharactersInString:@"[]"]; forin (NSString * s in commaSeparatedParenthesizedStrings) { [result addObject:[s stringByTrimmingCharactersInSet:bracketsToTrim]]; }
请注意,这个解决scheme没有考虑括号内的逗号,而且会修剪input中的所有括号,所以[[[[[]][[]]hello][][[[][][]][][], [[][[][]world[[]][[]][]]
将返回@[@"hello", @"world"]
上面的NSScanner解决scheme或类似的解决scheme应该更加健壮,以确保在分割inputstring时避免括号内的逗号。
尝试这个…
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);