2012-12-11 21 views
12

tôi cần phải chia một chuỗi trong C# như sau:Chia chuỗi sau khi số tiền x của cùng một số

Chuỗi là một cái gì đó như thế này: 0000120400567

Luôn luôn có những 0 s lúc đầu. Trong ví dụ trên có sáu số không theo sau là 120400567. Tôi muốn chia chuỗi mà tôi nhận được phần cuối cùng 120400567.

Số lượng số không ở đầu có thể thay đổi (số phần cuối cùng sẽ tăng một số) có nghĩa là chúng tôi có thể có 001245878945 và những gì tôi muốn là 1245878945.

Làm cách nào để tách chuỗi này ra khỏi số 0 đầu tiên hoặc số z đầu tiên của số không và chỉ nhận số kết thúc? Nó có thể được để số không có bất kỳ số không ở đầu và số bắt đầu trực tiếp từ số đầu tiên ... nhưng nó có thể là số lượng có 8 số không và hơn 2 hoặc nhiều số chữ số.

+0

bạn đang cố gắng 'chia' một ** phạm vi số ** .. trong trường hợp đó là ** ok ** để chia nó với' regex' như được đưa ra trong ans nhưng ** if * * nó sẽ là một 'số duy nhất' hơn bằng cách sử dụng' regex' sẽ là ** quá mức ** đặc biệt nếu bạn định chia 'nó' thành' regex' ... – Anirudha

+0

Tại sao không phân tích cú pháp thành số nguyên và đưa nó trở lại một chuỗi? – zzzzBov

Trả lời

23
string withoutLeadingZeroes = withLeadingZeroes.TrimStart('0'); 

(hoặc

string withoutLeadingZeroes = Regex.Replace(withLeadingZeroes, "^0*", ""); 

hoặc

string withoutLeadingZeroes = new String(
    withLeadingZeroes.SkipWhile(c => c == '0').ToArray()); 

hoặc ...)

5

Bạn có thể sử dụng int.Parse để chuyển đổi String thành một Integer. Điều này sẽ làm giảm số 0, nhưng tất nhiên là giới hạn trong chuỗi trong phạm vi int (hoặc dài, nếu bạn sử dụng nó).

9

TrimStart là bạn của bạn. Tuy nhiên, bạn cần phải cẩn thận rằng bạn không kết thúc với một chuỗi rỗng khi ban đầu của bạn bao gồm 0s chỉ.

string s = "0000120400567"; 
s = s.TrimStart('0'); 
if (s == "") 
    s = "0"; 
+0

nitpicking: 'if (s.Length == 0)' có thể nhanh hơn một chút –

+0

@KooKiz: Có thể là :-) – Douglas

0

Nếu bạn có một loạt các con số trong chuỗi, bạn có thể sử dụng (?:\b(?:0+|(?=[1-9]))) chia rằng chuỗi

Vì vậy, tách 0534 000500 35435 040 với trên regex sẽ kết thúc với

534 
500 
35435 
40 

Nếu nó chỉ chứa một số duy nhất Regex thì không bắt buộc và đặc biệt là splitting

Nhưng nếu bạn vẫn muốn split chuỗi, bạn có thể làm điều đó với (?:^0+|^)

4

Tại sao bạn không chuyển đổi nó thành int32 hoặc dài hoặc bất cứ điều gì bạn muốn và sau đó chuyển đổi nó thành một chuỗi?

int i = int.Parse("0000120400567"); 
     string s = i.ToString(); 
Các vấn đề liên quan