2012-05-10 11 views
11

¿Cómo puedo eliminar los ceros a la izquierda de un NSString?NSString eliminando los ceros iniciales?

p. Ej. Tengo:

NSString *myString;

con valores como @"0002060", @"00236" y @"21456".

Quiero eliminar los ceros si se producen:

por ejemplo, Convierte lo anterior a @"2060", @"236" y @"21456".

Gracias.

Respuesta

29

Para los números más pequeños:

NSString *str = @"000123";  
NSString *clean = [NSString stringWithFormat:@"%d", [str intValue]]; 

Para los números superiores a int32 rango:

NSString *str = @"100004378121454";  
NSString *clean = [NSString stringWithFormat:@"%d", [str longLongValue]]; 
+0

Eres impresionante @adali :)) –

+0

eres bienvenido :) – adali

+1

Hola @adali, pero cuando la longitud de la cadena es> 9, le da un valor diferente. ¿Puedes comprobarlo.Por ejemplo,NSString * str = @ "3103282369"; NSString * clean = [NSString stringWithFormat: @ "% d", [str intValue]]; NSLog (@ "Clean-% @", clean); da 2147483647 como salida. –

1
- (NSString *) removeLeadingZeros:(NSString *)Instring 
{ 
     NSString *str2 =Instring ; 

     for (int index=0; index<[str2 length]; index++) 
     { 
      if([str2 hasPrefix:@"0"]) 
       str2 =[str2 substringFromIndex:1]; 
      else 
       break; 
     } 
     return str2; 

} 
+0

Su código original faltó una declaración de devolución antes de la llamada recursiva para eliminarLeadingZeros. –

1

El siguiente método proporciona también la salida.

NSString *test = @"0005603235644056"; 

// Skip leading zeros 
NSScanner *scanner = [NSScanner scannerWithString:test]; 
NSCharacterSet *zeros = [NSCharacterSet 
         characterSetWithCharactersInString:@"0"]; 
[scanner scanCharactersFromSet:zeros intoString:NULL]; 

// Get the rest of the string and log it 
NSString *result = [test substringFromIndex:[scanner scanLocation]]; 
NSLog(@"%@ reduced to %@", test, result); 
17

Esto es en realidad un caso que se adapta perfectamente a las expresiones regulares:

NSString *str = @"00000123"; 

NSString *cleaned = [str stringByReplacingOccurrencesOfString:@"^0+"    
                withString:@"" 
                 options:NSRegularExpressionSearch 
                 range:NSMakeRange(0, str.length)]; 

Sólo una línea de código (en un sentido lógico, los saltos de línea añadido para mayor claridad) y no hay límites en la cantidad de caracteres que maneja

Una breve explicación del patrón de expresión regular:

El ^ significa que el patrón debe ser anclado en el principio de la cadena. Necesitamos eso para asegurarnos de que no coincida con ceros legítimos dentro de la secuencia de dígitos.

La parte 0+ significa que debe coincidir con uno o más ceros.

Juntas, coinciden con una secuencia de uno o más ceros al principio de la cadena, luego la reemplaza con una cadena vacía, es decir, elimina los ceros iniciales.

1

Además de la respuesta de adali, puede hacer lo siguiente si usted está preocupado por la cadena es demasiado largo (es decir, mayor de 9 caracteres):

NSString *str = @"000200001111111"; 
NSString *strippedStr = [NSString stringWithFormat:@"%lld", [temp longLongValue]]; 

Esto le dará el resultado: 200001111111

De lo contrario, [NSString stringWithFormat:@"%d", [temp intValue]] probablemente devolverá 2147483647 debido a un desbordamiento.

Cuestiones relacionadas