2014-03-28 115 views
-4

我需要拆分文本(的NSString)之間拆分文本,:目標C:看起來像這樣的括號

[text],[more text here].

有沒有辦法做到這一點?我需要在一個String []中存儲括號之間的兩個文本,用「,」分隔。

+0

所以,你希望你的輸出爲'文字,更多的文字here'?作爲單個字符串? – Abizern

+0

你可能不想使用C數組的字符串,而是使用'NSArray'。 – dave

+0

我試過使用componentSeparatedByString,但是效果不好...... – erickles

回答

1

您可以使用正則表達式和NSRegularExpression來解決此問題。

構建一個與括號內的文本匹配的模式。例如,模式@"\\[([^]]*)]"與開頭支架\\[相匹配 - 需要使用反斜槓將括號視爲文字字符,零個或多個字符,除了結尾括號[^]]*,文本如此以便參考([^]]*)以及結尾括號]。您可以建立一個與逗號分隔的括號文本序列匹配的模式,或者只是查找多個包圍文本的匹配項 - 取決於您的要求。

創建正則表達式後,使用方法regularExpressionWithPattern:options:error:,可以使用方法matchesInString:options:range:獲取所有匹配的數組。你可以處理這個數組來產生你需要的字符串數組。

+0

謝謝!實際上,我已經在iOS中搜索了正則表達式的概念,並且找出瞭如何去做! – erickles

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); 

你可能會認爲這是矯枉過正,但使用NSScanners相當靈活,這是一個有用的技能就知道了。

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解決方案,或一個像它應該更加健壯,以確保在分割輸入字符串時避免括號內的逗號。

-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); 
相關問題