2012-07-06 17 views

Odpowiedz

11

Spróbuj tego:

NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
NSString *res = [split componentsJoinedByString:@" "]; 

jak to działa:

  • Pierwsza linia dzieli znakami nowej linii
  • Druga linia usuwa puste elementy wstawione do wielu separatorach z rzędu
  • Trzecia linia łączy ciągi z powrotem przy użyciu jednego miejsca jako nowy separator
+0

Dzięki, akceptując swoją odpowiedź jako najłatwiejszy dla czytelności. –

0

użyć wyrażenia regularnego, coś jak "s/\ n +/\ m /" (a zastąpić który będzie pasował do 1 lub więcej znak nowej linii i zastąpić jednym białej przestrzeni)

to pytanie ma link do biblioteka regex, ale jest dostępny NSRegularExpression zbyt

2

Jak Wattson mówi ci może to zrobić z NSRegularExpression, ale kod jest dość szczegółowy, więc jeśli chcesz to zrobić w kilku miejscach, sugeruję wykonanie metody pomocniczej lub nawet kategorii NSString za pomocą metody podobnej do -[NSString stringByReplacingMatchingPattern:withString:] lub podobnej.

NSString *string = @"a\n\na"; 
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+" 
                 options:0 
                  error:NULL] 
       stringByReplacingMatchesInString:string 
       options:0 
       range:NSMakeRange(0, [string length]) 
       withTemplate:@" "]); 
10

3 razy bardziej wydajnych niż przy componentsSeparatedByCharactersInSet

NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+" 
                withString:@" " 
                 options:NSRegularExpressionSearch 
                  range:NSMakeRange(0, original.length)]; 

Możliwe alternatywne wzory regex:

  • wymienić tylko przestrzeń: [ ]+
  • wymienić miejsca i karty [ \\t]+
  • wymienić spacja, karty i nowe linie: \\s+
  • Wymień nowe linie: \\n+