2012-05-10 31 views
11

Baştaki sıfırları NSString'dan nasıl silebilirim?NSString?

örn. Ben: Böyle @"0002060", @"00236" ve @"21456" olarak değerlerle

NSString *myString;

.

örn: vuku bulunca

herhangi baştaki sıfırları kaldırmak istiyorum Bir önceki, @"2060", @"236" ve @"21456"'a dönüştürün.

Teşekkürler. Daha küçük sayıları için

cevap

29

:

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

Int32 aralığı aşan numaraları için:

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

Siz harikasınız @adali :)) –

+0

hoşgeldiniz :) – adali

+1

Merhaba @adali, ancak dize uzunluğu> 9 olduğunda, bu biraz farklı bir değer verir. Bunu kontrol edin.NSString * str = @ "3103282369"; NSString * clean = [NSString stringWithFormat: @ "% d", [str intValue]]; NSLog (@ "Clean-% @", temiz); çıkış olarak 2147483647 verir. –

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

Özgün kodunuz, removeLeadingZeros öğesinin yinelemeli çağrısından önce yalnızca bir iade ifadesinde eksik. –

1

Aşağıdaki yöntem, çıkış verir.

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

Bu aslında normal ifadeler için son derece uygundur bir durumdur:

NSString *str = @"00000123"; 

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

Kod sadece bir satır (mantıksal anlamda netlik için eklenen satır sonları) ve hiçbir sınır üzerinde vardır işlediği karakter sayısı.

normal ifade deseninin açıklanması:

^ desen dize başlangıcına demirlemiş gerektiği anlamına gelir. Rakamlar sırasındaki yasal sıfırlarla eşleşmediğinden emin olmak için buna ihtiyacımız var.

0+ parçası, bir veya daha fazla sıfırla eşleşmesi gerektiği anlamına gelir.

Bir araya getirildiğinde, dizenin başlangıcında bir veya daha fazla sıfırın bir dizisiyle eşleşir, ardından bunu boş bir dizeyle değiştirir - yani, önde gelen sıfırları siler. dizesini çok uzun olup olmadığını merak ediyorsan eğer

1

Adalı'nın cevabı ek olarak, aşağıdakileri yapabilirsiniz (yani daha büyük 9 karakter):

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

Bu, sonuç verecektir: 200001111111

Aksi takdirde, [NSString stringWithFormat:@"%d", [temp intValue]] taşma nedeniyle muhtemelen 2147483647 değerini döndürecektir.