我需要拆分文本(的NSString)之间拆分文本,:目标C:看起来像这样的括号
[text],[more text here].
有没有办法做到这一点?我需要在一个String []中存储括号之间的两个文本,用“,”分隔。
我需要拆分文本(的NSString)之间拆分文本,:目标C:看起来像这样的括号
[text],[more text here].
有没有办法做到这一点?我需要在一个String []中存储括号之间的两个文本,用“,”分隔。
您可以使用正则表达式和NSRegularExpression
来解决此问题。
构建一个与括号内的文本匹配的模式。例如,模式@"\\[([^]]*)]"
与开头支架\\[
相匹配 - 需要使用反斜杠将括号视为文字字符,零个或多个字符,除了结尾括号[^]]*
,文本如此以便参考([^]]*)
以及结尾括号]
。您可以建立一个与逗号分隔的括号文本序列匹配的模式,或者只是查找多个包围文本的匹配项 - 取决于您的要求。
创建正则表达式后,使用方法regularExpressionWithPattern:options:error:
,可以使用方法matchesInString:options:range:
获取所有匹配的数组。你可以处理这个数组来产生你需要的字符串数组。
谢谢!实际上,我已经在iOS中搜索了正则表达式的概念,并且找出了如何去做! – erickles
如果你只是想打开@“[文字],[更多文字在这里]。”到@“文字,更多文字在这里”,那么你可以使用扫描仪。
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]];
}
请注意,此解决方案不中括号占逗号,而且将削减从输入的所有括号,所以[[[[[]][[]]hello][][[[][][]][][], [[][[][]world[[]][[]][]]
将返回@[@"hello", @"world"]
上述NSScanner解决方案,或一个像它应该更加健壮,以确保在分割输入字符串时避免括号内的逗号。
尝试......
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);
所以,你希望你的输出为'文字,更多的文字here'?作为单个字符串? – Abizern
你可能不想使用C数组的字符串,而是使用'NSArray'。 – dave
我试过使用componentSeparatedByString,但是效果不好...... – erickles