2012-05-10 4 views
11

Come rimuovere gli zeri iniziali da uno NSString?NSString rimuovendo gli zeri iniziali?

ad es. Ho:

NSString *myString;

con valori come @"0002060", @"00236" e @"21456".

Voglio rimuovere eventuali zeri iniziali se si verificano:

esempio Converti il ​​precedente in @"2060", @"236" e @"21456".

Grazie.

risposta

29

Per i numeri più piccoli:

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

Per numeri superiori int32 gamma:

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

Sei fantastico @adali :)) –

+0

sei il benvenuto :) – adali

+1

Salve @adali, ma quando la lunghezza della stringa è> 9, fornisce un valore diverso. Puoi controllarlo.Per ad es.NSString * str = @ "3103282369"; NSString * clean = [NSString stringWithFormat: @ "% d", [str intValue]]; NSLog (@ "Clean-% @", pulito); fornisce 2147483647 come output. –

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

Il codice originale mancava semplicemente un'istruzione return prima della chiamata ricorsiva per rimuovereLeadingZeros. –

1

Il seguente metodo dà anche l'uscita.

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

Questo è in realtà un caso che è perfettamente adatto per le espressioni regolari:

NSString *str = @"00000123"; 

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

sola riga di codice (in senso logico, interruzioni di riga aggiunte per chiarezza) e non vi sono limiti il numero di caratteri che gestisce.

Una breve spiegazione del modello di espressione regolare:

Il ^ significa che il modello dovrebbe essere ancorata all'inizio della stringa. Abbiamo bisogno di questo per assicurarci che non corrisponda a zero legittimi all'interno della sequenza di cifre.

La parte 0+ indica che deve corrispondere a uno o più zeri.

Insieme, corrisponde a una o più zeri all'inizio della stringa, quindi lo sostituisce con una stringa vuota, cioè elimina gli zeri iniziali.

1

Oltre alla risposta di Adali, è possibile effettuare le seguenti operazioni, se siete preoccupati per la stringa di essere troppo lungo (cioè maggiore di 9 caratteri):

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

Questo vi darà il risultato: 200.001.111.111

In caso contrario, [NSString stringWithFormat:@"%d", [temp intValue]] restituirà probabilmente 2147483647 a causa di un sovraccarico.