2012-07-06 8 views

Respuesta

11

Prueba esto:

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

Así es como funciona:

  • Primera línea divide por caracteres de nueva línea
  • Segunda línea elimina los elementos vacíos insertados para múltiples separadores en una fila
  • Tercera línea se une a las cadenas de vuelta utilizando un único espacio que el nuevo separador
+0

Gracias, aceptando su respuesta por ser el más fácil para facilitar la lectura. –

0

utilizar una expresión regular, algo así como "s/\ n +/\ w /" (una sustitución que coincidirá con 1 o más nueva línea carácter y reemplazarlo con un solo espacio en blanco)

esta pregunta tiene una link a una biblioteca de expresiones regulares, pero hay disponibles también NSRegularExpression

2

Como Wattson que dice puede hacer esto con NSRegularExpression pero el código es bastante detallado, así que si quiere hacer esto en varios lugares le sugiero que haga un método de ayuda o incluso una categoría NSString con un método como -[NSString stringByReplacingMatchingPattern:withString:] o algo similar.

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 veces más performant de utilizar componentsSeparatedByCharactersInSet

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

posibles patrones de expresiones regulares alternativos:

  • reemplazar sólo el espacio: [ ]+
  • Reemplazar espacio y pestañas: [ \\t]+
  • Reemplazar espacio, pestañas y saltos de línea: \\s+
  • Reemplazar saltos de línea: \\n+
Cuestiones relacionadas