我需要拆分文本(NSString),如下所示:
[text],[more text here].
有办法做到这一点吗?我需要在String []中存储括号之间的两个文本,用“,”分隔。
答案 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);