我需要拆分文本(的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