2012-05-10 40 views
11

Làm cách nào để xóa số 0 đứng đầu khỏi số NSString?NSString bằng cách loại bỏ các số 0 ban đầu?

ví dụ: Tôi có:

NSString *myString;

với các giá trị như @"0002060", @"00236"@"21456".

Tôi muốn xóa mọi số 0 đứng đầu nếu chúng xảy ra:

ví dụ: Chuyển đổi trước đó thành @"2060", @"236"@"21456".

Cảm ơn.

Trả lời

29

Đối với các số nhỏ hơn:

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

Đối với số vượt quá phạm vi int32:

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

Bạn tuyệt vời @adali :)) –

+0

bạn được chào đón :) – adali

+1

Hi @adali, nhưng khi độ dài chuỗi là> 9, nó mang lại một số giá trị khác nhau. Bạn có thể kiểm tra nó.Đối với ví dụ:NSString * str = @ "3103282369"; NSString * clean = [NSString stringWithFormat: @ "% d", [str intValue]]; NSLog (@ "Clean-% @", sạch sẽ); cho đầu ra là 2147483647. –

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

Mã ban đầu của bạn vừa thiếu một câu lệnh trả về trước cuộc gọi đệ quy để removeLeadingZeros. –

1

Các phương pháp sau đây cũng cung cấp cho các đầu ra.

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

Đây thực sự là một trường hợp đó là hoàn toàn phù hợp cho biểu thức thông thường:

NSString *str = @"00000123"; 

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

Chỉ có một dòng mã (theo nghĩa logic, ngắt dòng thêm cho rõ ràng) và không có giới hạn về số ký tự mà nó xử lý.

Một lời giải thích ngắn gọn về các mẫu biểu thức chính quy:

Các ^ có nghĩa là mô hình cần được neo vào đầu của chuỗi. Chúng tôi cần điều đó để đảm bảo nó không khớp với số 0 hợp lệ bên trong dãy số.

Phần 0+ có nghĩa là nó phải khớp với một hoặc nhiều số 0.

Đặt lại với nhau, nó khớp với chuỗi gồm một hoặc nhiều số 0 ở đầu chuỗi, sau đó thay thế bằng chuỗi rỗng - nghĩa là nó xóa số 0 đầu tiên.

1

Ngoài câu trả lời adali, bạn có thể làm như sau nếu bạn đang lo lắng về chuỗi quá dài (tức là lớn hơn 9 ký tự):

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

này sẽ cung cấp cho bạn kết quả: 200.001.111.111

Nếu không, [NSString stringWithFormat:@"%d", [temp intValue]] có thể sẽ trả về 2147483647 do tràn.

Các vấn đề liên quan